$ true이면 echo YES; false이면 echo NO;
$ true && true; then echo NO; fiYES$ true && false; else echo NO$ false && false; else echo NO$; ;그런 다음 에코 YES; 그렇지 않으면 fiNO;
$ true || true; else echo NO; false; then echo YES; false이면 fiYES$; false || false; 그러면 에코 YES; 그렇지 않으면 fiNO;
$ if ! false; then echo NO; if ! true; then echo YES;
볼 수 있다
진실그리고
거짓우리는 논리 연산에 대한 이해에 따라 진행하지만 Shell의 논리 연산 구현을 더 잘 이해하려면 다음을 파악해야 합니다.
진실그리고
거짓어떻게 작동하나요?
대답은: 아니오입니다.
진실그리고
거짓그 자체로는 논리값이 아니며 모두 셸에 내장된 명령이지만 반환 값은 "논리값"입니다.
$ true$ 에코 $?0$ false$ 에코 $?1
볼 수 있다
진실0을 반환했으며
거짓그런 다음 1이 반환됩니다. 우리가 이산수학에서 배운 참값 1과 0에는 해당되지 않고 그 반대이다.
$ help true falsetrue: true 성공적인 결과를 반환합니다.false: false 실패한 결과를 반환합니다.$ type true falsetrue는 쉘 내장입니다.false는 쉘 내장입니다.
설명하다:
$?마지막 프로세스의 종료 상태(종료 상태 코드)를 저장하는 특수 변수입니다.
위의 연산을 보면 왜 C언어 프로그래밍에 중점을 두는지 생각하기 어렵지 않습니다.
기본함수 앞에 추가
정수, 그리고 끝에 추가
0을 반환. 셸에서는 프로그램이 성공적으로 종료되었는지 여부를 나타내는 신호로 0이 사용됩니다.
진실그리고
거짓본질적으로 이는 전통적인 참값과 거짓값(1과 0)이 아닌 특정 프로그램이 올바르게 종료되었는지 여부를 반영하는 데 사용됩니다. 반대로 0과 1을 반환합니다. 다행히도 논리 연산을 수행할 때 이러한 문제에 대해 걱정할 필요가 없습니다.
이전 섹션에서 우리는 Shell에서 "논리적 값"이 무엇인지 명확하게 이해했습니다. 이는 프로세스가 종료될 때 반환되는 값입니다. 성공적으로 반환되면 true이고, 실패하면 false입니다.
조건부 테스트에서는 다음을 사용합니다.
시험이러한 명령어를 사용하여 수치 테스트(각종 수치 속성 테스트), 문자열 테스트(각종 문자열 속성 테스트), 파일 테스트(각종 파일 속성 테스트)를 수행하고, 이를 통해 다양한 일상적인 작업을 완료한 후 테스트를 진행합니다. , 다양한 테스트의 논리적 조합과 결합하여 더 복잡한 작업을 완료할 수 있습니다.
$ if test 5 -eq 5; then echo YES; else echo NO; fiYES$ if test 5 -ne 5; then echo YES;
$ test -n이 비어 있지 않으면 echo YES; else echo NO; then echo YES; else echo NO$ if test -z ; then echo YES else; if test -n ;그렇다면 에코 YES; 그렇지 않으면 에코 NO;
$ if test -f /boot/System.map; else echo NO; if test -d /boot/System.map; else echo NO;
$ a=5;b=4;c=6;$ if test $a -eq 5 -a $b -eq 4 -a $c -eq 6; then echo YES;
$ if test -f /etc/profile -o -d /etc/profile; then echo YES else echo NO;
!작동하지 않음
$ if test ! -f /etc/profile; 그렇지 않으면 echo NO;
위의 내용은 단지 보여줍니다.
시험통과할 수 있는 몇 가지 매우 간단한 테스트를 명령하세요.
도움말 테스트얻다
시험. 주목해야 할 점은
시험명령 내부의 논리 연산과 셸의 논리 연산자 사이에는 몇 가지 차이점이 있습니다.
-에이그리고
&&,
-영형그리고
||, 둘은 혼동될 수 없습니다. 운영이라기보다는
!, 아래에서 비교해 보세요.
$ cat > test.sh#!/bin/bashecho test[CTRL+D] # cat 입력을 끝내려면 CTRL과 D 키 조합을 누르십시오. 아래와 동일하며 더 이상 $ chmod +x test.sh$를 지정하지 마십시오. -s test .sh -a -x test.sh; else echo NO; if test -s test.sh && test -x test.sh;
$ str1=test$ str2=test$ if test -z $str2 -o $str2 == $str1; then echo YES; else echo NO; if test -z $str2 == $str1; 그런 다음 에코 YES; 그렇지 않으면 fiYES;
$ i=5$ if test ! $i -lt 5 -a $i -ne 6; else echo NO; fiYES$ if ! test $i -lt 5 -a $i -eq 6; ; 그렇지 않으면 fiYES;
그 차이점을 쉽게 알 수 있는데,
-에이그리고
-영형테스트 명령의 매개변수로 테스트 명령 내부에서 사용되며,
&&그리고
||테스트의 반환 값을 계산하는 데 사용됩니다.
!둘 다에 공통적입니다. 주의가 필요한 사항은 다음과 같습니다.
때로는 필요하지 않습니다
!다음과 같은 연산자
-eq그리고
-네정반대로 두 값이 같은지 테스트하는 데 사용할 수 있습니다.
-지그리고
-N이는 또한 해당되며 특정 문자열이 비어 있는지 테스트하는 데 사용됩니다.
존재하다
세게 때리다내부에,
시험명령은 [] 연산자로 대체할 수 있지만, [
나중에] 앞에는 추가 공백이 있어야 합니다.
문자열을 테스트할 때 변수 내용이 비어 있을 때 테스트 매개변수만 있고 테스트 내용이 없는 상황을 방지하기 위해 모든 변수를 큰따옴표로 묶는 것이 좋습니다.
아래에서는 위의 세 가지 주의 사항을 설명하기 위해 예를 사용합니다.
-네그리고
-eq이에 따라 우리는 때때로 생략할 수 있습니다.
!작업
$ i=5$ test $i -eq 5; else echo NO; if test $i -ne 5; else echo NO$ if test ! 그런 다음 에코 YES; 그렇지 않으면 fiNO;
사용
[ ]대체할 수 있다
시험, 훨씬 더 "아름답게" 보일 것입니다
$ if [ $i -eq 5 ]; else echo NO; fiYES$ if [ $i -lt 6 ] then echo YES;
일부 문자열 변수를 추가하는 것을 잊지 마세요.
,기억하다[나중에
]앞에 공간을 추가하세요.
$ str=$ if [ $str = test]; then echo YES; fi-bash: [: 누락됨 `]'NO$ then echo YES; bash: [: =: 단항 연산자 예상NO$ if [ $str = test ] then echo YES echo NO;
이때 조건부 테스트가 도입되었습니다. 명령 목록은 실제로 위에서 이미 사용했습니다. 즉, 여러 테스트 명령을 통해.
&&,
||그리고
!일련의 결합된 명령입니다. 이 명령 순서는 효과적으로 대체됩니다.
만약/그러면조건부 분기 구조. C 언어 프로그래밍에서 자주 하는 다음과 같은 객관식 질문을 생각하는 것은 어렵지 않습니다(매우 지루한 예이지만 의미 있음). 다음이 인쇄됩니까?
j, 인쇄되면 무엇이 인쇄되나요?
#include <stdio.h>int main(){ int i, j; i=5;j=1; if ((i==5) && (j=5)) printf(%dn, j); 0을 반환;}
숫자 5가 인쇄될 것임을 쉽게 알 수 있습니다.
나는==5이 조건이 유지되고, 이후에는
&&, 전체 조건 성립 여부를 판단하려면 후속 판단을 해야 하는데, 이 판단은 통상적인 판단이 아니라 먼저
j5로 수정한 후 참값으로 변환하면 조건이 참이 되어 5가 출력됩니다. 따라서 이 문장은 다음과 같이 해석될 수 있습니다.
나5와 같다면
j다음과 같은 경우 값 5를 할당합니다.
j가 1보다 크면(이전에 이미 true였기 때문에) 출력합니다.
j값. 이런 식으로 사용하세요
&&연결된 판결문은 두 가지를 대체합니다.
만약에조건부 분기문.
이는 우리가 전달할 수 있는 논리 연산의 고유한 속성을 정확하게 기반으로 합니다.
&&,
||교체하다
만약/그러면조건부 분기 구조를 기다려 명령 목록을 생성합니다.
명령 목록의 실행 규칙은 논리 연산의 연산 규칙을 따릅니다.
&&연결된 명령의 경우 전자가 성공적으로 반환되면 다음 명령이 실행되고, 그렇지 않으면 다음을 사용합니다.
||연결된 명령이 성공적으로 반환되면 후속 명령은 실행되지 않으며 그 반대의 경우도 마찬가지입니다.
$ ping -c 1 www.lzu.edu.cn -W 1 && echo =======연결됨========
매우 흥미로운 질문이 제기되는데, 이는 위에서 언급한 것입니다. 왜 C 프로그램이 되어야 하는가?
기본()함수는 마지막에 0을 반환합니까? 그렇지 않다면 이런 종류의 프로그램을 명령 목록에 넣으면 어떤 결과가 발생할까요? 간단한 C 프로그램을 직접 작성한 다음 명령 목록에 넣어 확인해보세요.
때로는 명령 목록이 대신 사용됩니다.
만약/그러면조건부 분기 구조는 일부 코드를 저장하고 프로그램을 더 아름답고 읽기 쉽게 만들 수 있습니다. 예를 들면 다음과 같습니다.
#!/bin/bashecho $#echo $1if [ $# -eq 1 ] && (echo $1 | grep ^[0-9]*$ >/dev/null);then echo YESfi
참고: 위의 예에서는 매개변수 수가 1이고 유형이 숫자여야 합니다.
을 더한
1번 출구, 생략하겠습니다
만약/그러면구조
#!/bin/bashecho $#echo $1! ([ $# -eq 1 ] && (echo $1 | grep ^[0-9]*$ >/dev/null)) && 종료 1echo 예
이 처리 후 프로그램 매개변수의 판단에는 간단한 코드 라인만 필요하며 더욱 아름다워집니다.
이 섹션에서는 쉘 프로그래밍의 논리 연산, 조건 테스트 및 명령 목록을 소개합니다.