/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 (즉, true) 인 경우에만 평가됩니다. ||
는 그 반대입니다. 왼쪽 이탈 상태가 0이 아닌 경우에만 오른쪽을 평가합니다 (즉, false).
는 반환 값이있는 프로그램입니다. 내부 테스트가 참으로 평가되면 0을 반환합니다. 그렇지 않으면 0이 아닌 값을 반환합니다.
예 :
$ false && echo howdy! $ true && echo howdy! howdy! $ true || echo howdy! $ false || echo howdy! howdy!
추가 참고 사항 :
which [
, [
가 실제로 프로그램을 가리키는 것을 볼 수 있습니다! 일반적으로 스크립트에서 실행되는 것은 아닙니다. 실제로 실행되는 내용을 보려면 type [
를 실행하십시오. 프로그램을 사용하려면 다음과 같은 전체 경로를 지정하십시오. 따라서 : /bin/[ 1 = 1
.
댓글
답변
내 치트 시트 :
- “A; B “A를 실행 한 다음 B를 실행합니다. A의 성공 여부에 관계없이
- “A & & B “실행 B A가 성공하면
- “A || B “A가 실패하면 B 실행
- “A & “백그라운드에서 A 실행
댓글
- ' JavaScript 작업에서 시연되는 흥미로운 람다 미적분 유사점 (순서대로 변수 정의); " 왼쪽 (일명 true) " :
(a => b => a)
. " 오른쪽 (일명 false) " :(a => b => b)
. " A; B " " 그런 다음 "(a => b => (() => b())(a()))
. " A & & B " " If else (when) "(a => b => a()(() => right)(b))
." A || B " " else없이 if (unless) "(a => b => a()(b)(() => right))
. " a & & b || c " " ifThenElse "(a => b => c => (unless(when(a)(b))(c))())
. - bash에서 왼쪽은 0 / 빈 문자열과 비슷하고 오른쪽은 다른 모든 것입니다.
- 하나의 수직 막대는 어떻습니까?
답변
위에서 @ Shawn-j-Goff “의 답변을 확장하려면 &&
는 논리적 AND이고 ||
는 논리적 OR입니다.
this 부분을 참조하십시오. 고급 Bash 스크립팅 가이드. 사용자 참조를위한 링크의 일부 내용은 아래와 같습니다.
& & 및
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.
|| 또는
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.
답변
내 경험상 & & d || 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"
몇 번 반복하여 변수를 설정하거나 파일 등을 생성하기 위해, 삶이 더 쉽고 스크립트는 단일 라인을 사용하여 더 매끄럽게 보입니다. 유일한 단점은 단일 반복에서 여러 명령을 구현하는 것이 조금 더 어려워 지지만 함수를 사용할 수 있다는 것입니다.
댓글
- 멋지네요. objc 코드 (a == b)가 생각 나나요? val = 1 : val = 2;
- " & ?
./someScript.sh & && echo 'ok' || echo 'ko'
- 형식 :
foo && bar || baz
에 대한 구문 오류가 발생합니다.foo
인 경우 성공하면bar
가 실패하고baz
가 실행되므로if
문. -
{}
괄호 안에&&
또는||
(예 :pidof udpxy > /dev/null 2>&1 && echo "udpxy is up!" || { echo "udpxy is down!"; /etc/init.d/udpxy restart; }
).if..then..else
가 true /보다 신뢰할 수있는 " 인식기 "라는 점도 언급 할 가치가 있습니다.&&
및||
를 사용하는 것보다 잘못된 조건입니다.
답변
단축 절단이라는 개념이 있습니다.
(expr1 && expr2)
가 평가 될 때-expr2
는 exp1
가”true “로 평가되는 경우에만 평가됩니다. 이는 (expr1 && expr2)
가 true가 되려면 expr1
및 expr2
가 모두 true 여야하기 때문입니다. expr1
가 “false”로 평가되는 경우 expr2
는 (expr1 && expr2)
때문에 evalued (바로 가기)가 아닙니다. 이미 “flase”입니다.
다음 시도-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
||
(또는)와 비슷하지만 짧습니다. 절단이 반전됩니다.
설명
- 이 로직은 일반적으로 " 단락
. ' " 짧은 절단 " 문구를 본 적이 없습니다. 참고 문헌을 찾는 데 도움이되도록 언급합니다.
Answer
Shawn J. Goff의 답변 예제 정확하지만 설명은 반대입니다. 확인하십시오 :
& &의 오른쪽 왼쪽의 종료 상태가 NONZERO 인 경우에만 평가됩니다. || 반대 : 왼쪽 이탈 상태가 0 인 경우에만 오른쪽을 평가합니다.
댓글
- 셸의 경우 0 종료 코드가 true 로 평가되어
의 왼쪽에 0이 아닌 종료 코드가 있음을 알고 있습니다. id = “90ef570c64″>
결과 전체 표현식이 false ?를 반환합니까?
- 당신의 대답이 아니기 때문에 누군가가 당신의 편집을 승인하지 않았습니다.일부 답변이 틀렸다고 생각되면 반대 투표를하고 댓글을 남겨야합니다. 변경이 필요하다고 생각되면 댓글을 남겨주세요. 수정은 답의 의미를 변경하지 않는 문법, 서식 및 맞춤법 오류를 수정하기위한 것입니다.
- @countermode I ' 죄송합니다. 맞습니다. 나는 리눅스에서 0 = 거짓이고 0이 아닌 = 참이라고 생각했다 (C와 다른 많은 언어 / 환경 / 플랫폼 에서처럼). 오해를 드려 죄송합니다.
[ ... ]
프로그램이되기 위해서는 ", 대부분의 경우 입니다. 일반적으로 ' 파일은/bin/[
또는/usr/bin/[
에 있습니다.return
상태, 부울이 아님. 여기서return 0
는 성공을 의미합니다.