답변:
매개 변수 확장 부작용이 발생하도록하는 것이 유용한 경우가 있습니다.
예를 들어, 기본값 설정
read -p "Enter your name: " name
: ${name:=John Doe} # if the user entered an empty string
echo "$name"
${name:="John Doe"}
확장되어 :에 대한 인수로 읽히기 때문에 할당이 발생합니다. :없이 : 쉘은 "John Doe"를 명령으로 실행하거나 $name
이미 설정된 경우 값을 시도합니다
프로그램을 실행하지 않고 파일을 만드는 데 사용할 수 있습니다.
: > /path/to/file
이것은 프로그램을 touch /path/to/file
실행할 필요가 없기 때문에 무한히 빠르며 touch
평범한 것보다 조금 더 휴대하기 쉽습니다.
> /path/to/file
많은 시스템에서 작동하는 것 같습니다. 마찬가지로 파일에 대한 쓰기 권한이 있는지 확인하는 데 사용할 수 있습니다 .
if { : >> /path/to/file;} 2> /dev/null
then
echo "writeable"
else
echo "write permission denied"
fi
그러나 이것도 일반적으로없이 수행 할 수 있습니다 :
. 주의 사항 :
(이보다 신뢰할 수있는 이유는 연결된 질문을 참조하십시오 if [ -w /path/to/file ]
.)
과거에는 Unix V6과 Thompson Shell에서이 문장의 :
일부로 실제로 사용되었습니다 goto
. 매뉴얼 에 따르면 원래 Unix 버전 3에 나타났습니다.
전체 명령 파일에서 첫 번째 공백이 아닌 문자로 시작하고 뒤에 하나 이상의 공백이 있고 레이블이있는 행을 검색합니다. 이러한 행을 찾으면 goto는 명령 파일 오프셋을 레이블 다음 행으로 재배치하고 종료합니다. 이로 인해 쉘이 레이블이 지정된 행으로 전송됩니다.
요즘에는 bash
운영 중단없이 사용되어 성공을 반환합니다. 당신이 보면 사실, 소스 코드 , 당신은 둘 것을 볼 수 true
와 :
, 동일한 기능을 사용할 수 int colon_builtin()
아래. :
기본 제공 명령 이 없으며 /bin/true
실제로 수행하는 작업에 대한 상당히 큰 명령 입니다.
:
비전문가를 혼동 할 수 있지만, true
예를 들어에서 사용 되는 모든 위치에서 사용할 수 있습니다 command_that_can_fail || true
. 자세한 내용은 여기를 참조 하십시오 .
if
부정적인 측면에서만 무언가를 원할 때 긍정적 인 명령 테스트에서 사용할 수 있습니다 . 예를 들면 다음과 같습니다.
if [[ True == False ]]; then
:
else
echo "true <> flase"
fi
:
bash가 없으면 구문 오류가 발생합니다.
이것은 지나치게 단순화 된 예입니다. 일반적으로 해당 코드 세그먼트를 작성하지 않고 오류를 생성하지 않는 것이 필요한 경우 예비 코딩에 이러한 기술을 사용합니다.
if pgrep firefox >/dev/null ; then : ; else echo "Firefox not running"; fi
것 입니다. 예를 들어 firefox가 실행되지 않은 경우에만 오류가 표시됩니다. 즉, 명령에 오류가있을 때만 무언가를해야 할 때. pgrep firefox || echo "Firefox not running"
좀 더 읽기 쉽고 더 많은 명령을 허용하지만 이 방법은에 해당 합니다
방금 SSH 오류가있는 스크립트에서 스크립트를 사용하여 스크립트 오류를 방지했습니다.
이 경우 사용자가 일련의 서버에 연결할 수 있는지 확인하고 싶습니다. 연결이 정상이면 원격 호스트가 에코를 확인합니다. 연결이 실패하면 SSH가 오류로 응답합니다. 그러나 스크립트가 실패하면 SSH 명령 값이 아닌 0으로 스크립트를 종료하고 싶습니다. 따라서 본질적으로 ||
null 명령을 사용하여 SSH 오류를 OR하여 트랩합니다 :
. 다음과 같습니다 :
#!/bin/bash
for i in $(cat servers.txt); do
echo -n "$i ";
ssh user@${i} 'echo OK' || :;
done
그렇게하면 SSH에서 출력을 얻지 만 오류 코드는 얻지 못합니다.
....
swl06 ok
swl07 ok
swl08 Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
swl09 ok
swl10 Permission denied (publickey,gssapi-keyex,gssapi-with-mic,password).
....