나는 /etc/rc.d/init.d/sendmail
파일 (이것은 거의 사용되지 않았지만 시험을 위해 공부하고 있음을 알고 있음), &&
그리고 ||
연산자. 나는 다음과 같은 문장에서 사용될 수있는 곳을 읽었습니다.
if [ test1 ] && [ test2 ]; then
echo "both tests are true"
Elif [ test1 ] || [ test2 ]; then
echo "one test is true"
fi
그러나이 스크립트는 다음과 같은 한 줄 문장을 보여줍니다.
[ -z "$SMQUEUE" ] && SMQUEUE="QUEUE"
[ -f /usr/sbin/sendmail ] || exit 0
이들은 &&
및 ||
연산자는 테스트를 기반으로 응답을 유도하지만 이러한 연산자의 특정 사용에 관한 문서를 파헤칠 수는 없었습니다. 이 특정 상황에서 이들이 무엇을하는지 설명 할 수 있습니까?
&&
의 오른쪽은 왼쪽의 종료 상태가 0 인 경우에만 평가됩니다 (즉, 참). ||
는 반대입니다. 왼쪽 종료 상태가 0이 아닌 경우에만 오른쪽을 평가합니다 (즉, false).
[ ... ]
를 리턴 값이있는 프로그램으로 간주 할 수 있습니다. 내부 테스트가 true로 평가되면 0을 리턴합니다. 그렇지 않으면 0이 아닌 값을 반환합니다.
예 :
$ false && echo howdy!
$ true && echo howdy!
howdy!
$ true || echo howdy!
$ false || echo howdy!
howdy!
추가 메모 :
which [
를 수행하면 [
가 실제로 프로그램을 가리키는 것을 볼 수 있습니다! 그러나 일반적으로 스크립트에서 실행되는 것은 아닙니다. 실제로 실행되는 것을 보려면 type [
를 실행하십시오. 프로그램 사용을 원한다면 /bin/[ 1 = 1
와 같이 전체 경로를 지정하십시오.
내 치트 시트는 다음과 같습니다.
@ Shawn-j-Goff의 답변을 위에서 확장하려면 &&
는 논리 AND이며 ||
는 논리 OR입니다.
Advanced Bash 스크립팅 안내서의 this 부분을 참조하십시오. 사용자 참조 링크의 일부 내용은 다음과 같습니다.
&& AND
if [ $condition1 ] && [ $condition2 ]
# Same as: if [ $condition1 -a $condition2 ]
# Returns true if both condition1 and condition2 hold true...
if [[ $condition1 && $condition2 ]] # Also works.
# Note that && operator not permitted inside brackets
#+ of [ ... ] construct.
|| OR
if [ $condition1 ] || [ $condition2 ]
# Same as: if [ $condition1 -o $condition2 ]
# Returns true if either condition1 or condition2 holds true...
if [[ $condition1 || $condition2 ]] # Also works.
# Note that || operator not permitted inside brackets
#+ of a [ ... ] construct.
내 경험으로는 && 및 || if 문을 한 줄로 줄입니다.
/root/Sample.txt라는 파일을 찾고 있다고 가정하면 일반적인 반복은 셸에서 다음과 같습니다.
if [ -f /root/Sample.txt ]
then
echo "file found"
else
echo "file not found"
fi
이 6 개의 줄을 한 줄로 줄일 수 있습니다.
[[ -f /root/Sample.txt ]] && echo "file found" || echo "file not found"
변수를 설정하거나 파일 등을 만들기 위해 몇 가지 반복을 실행할 때 수명이 더 쉽고 스크립트가 한 줄 if 함수를 사용하여 더 매끄럽게 보이지만 단점은 단일 반복에서 여러 명령을 구현하는 것이 조금 더 어려워진다는 것입니다 기능을 사용할 수 있습니다.
"짧은 절단"이라는 개념이 있습니다.
(expr1 && expr2)
가 평가되는 경우-expr2
가 "true"로 평가되는 경우에만 exp1
가 평가됩니다. expr1
가 true가 되려면 expr2
와 (expr1 && expr2)
가 모두 true이기 때문입니다. expr1
가 "false"로 평가되면 expr2
가 이미 "flase"이므로 (expr1 && expr2)
가 평가되지 않습니다 (바로 가기).
다음을 시도하십시오-파일 F1
가 존재하고 파일 F2
가 존재하지 않는다고 가정하십시오.
( [ -s F1 ] && echo "File Exists" ) # will print "File Exists" - no short cut
( [ -s F2 ] && echo "File Exists" ) # will NOT print "File Exists" - short cut
||
(또는)의 경우와 유사하지만 짧은 절단이 취소됩니다.