If 문!
결정,결정.
소개
bash if 문이 매우 유용합니다. 이 섹션에서 우리의 Bash 스크립트 튜토리얼에서 당신은 것을 배우는 방법으로 사용할 수 있는 경우 문서 Bash 스크립트를 작업을 자동화할 수 있습니다.
If 문(및 밀접하게 관련된 사례 문)은 Bash 스크립트에서 결정을 내릴 수있게합니다. 그들은 우리가 설정할 수있는 조건에 따라 코드 조각을 실행할지 여부를 결정할 수있게합니다., If 문와 결합된 루프(살펴 다음 섹션에)만들 수 있도록 합 훨씬 더 복잡한는 스크립트를 해결할 수 있습니다 큰 작업입니다.
처럼 우리가 무엇을 보면서 이전 섹션에서 자신의 구문은 매우 특별 그래서 모든 상단에 작은 상세합니다.
기본 If 문
기본 if 문은 효과적으로 특정 테스트가 true 인 경우 주어진 일련의 동작을 수행합니다. 그것이 사실이 아니라면 그 행동을 수행하지 마십시오., 는 경우 다음과 같은 형식을 따릅니다.
경우
그리고
<명령>
fi
사이에서 무엇이든 다음과 fi(있을 경우 뒤로는)경우에만 실행됩 테스트(사이 대괄호)사실입니다.
간단한 예제를 살펴 보겠습니다.
if_example.sh
- #!/bin/bash
- #Basic if statement
- if
- then
- echo Hey that’s a large number.,
- pwd
- fi
- 날짜
그것은 인생이야:
- 라인의 4 의 경우 먼저 명령 라인에 인수가 100 보다 큰
- 6 호선,7-얻을 것이 실행하는 경우에 테스트선 4true 를 반환합니다. 당신은 당신이 원하는대로 여기에 많은 명령을 가질 수 있습니다.
- 선 6-백슬래시(\)앞에 작은 따옴표(‘)이 필요로 하나의 견적서 특별한 의미 강타하고 우리가 원하지 않는 특별한 의미를 갖습니다. 백 슬래시는 특별한 의미를 벗어나 정상적인 일반 작은 따옴표로 다시 만듭니다.,
- 라인 8-fi 는 if 문의 끝을 신호합니다. 이 이후의 모든 명령은 정상적으로 실행됩니다.
- 10 행-이 명령은 if 문 밖에 있기 때문에 if 문의 결과에 관계없이 실행됩니다.
- ./if_example.sh 15
- 금 5 2 월 9:06:30 2021
- ./if_example.sh 150
- 이봐 그건 큰 숫자입니다.
- /home/라/bin
- 금 5Feb9:06:30 2021
그것은 항상 좋은 연습을 테스트하는 스크립트의 입력을 커버하는 다양한 시나리오는 것이 가능합니다.,
Test
위의 if 문에서 대괄호()는 실제로 명령 테스트에 대한 참조입니다. 이것은 테스트가 허용하는 모든 연산자가 여기에서도 사용될 수 있음을 의미합니다. 보 남자 페이지를 테스트하십시오 가능한 모든 사업자(있는 꽤 몇 가지)그러나 일반적인 사람은 아래에 나열되어 있습니다.나는 이것이 어떻게 작동 하는지를 알아 내려고 노력할 것입니다. 표현식
주의해야 할 몇 가지 점:
- =는-eq 와 약간 다릅니다. false 를 반환 할 것입니다=문자열 비교를 수행합니다(즉., 문자에 대한 문자 같은)반면-eq 는 수치 비교를 수행한다는 의미는 true 를 반환합니다.
- 위의 파일을 참조 할 때 우리는 실제로 경로를 의미합니다. 경로는 절대 또는 상대적 일 수 있으며 파일이나 디렉토리를 참조 할 수 있음을 기억하십시오.
- 기 때문에만 참조하여 명령을 테스트할 수 있습험과 문제로 촬영하 테스트에서는 명령줄을 확인하는 우리의 행동은 올바른 것입니다.
- 테스트 001=1
- 에코$?
- 1
- 테스트 001-eq1
- 에코$?,나는 이것이 내가 할 수있는 유일한 방법이라고 생각한다.
- 1
- ls/etc>myfile
- 테스트-s myfile
- echo$?
- 0
그것을 분해하자:
- 1 행-문자열 기반 비교를 수행하십시오. 테스트는 결과를 인쇄하지 않으므로 대신 다음 줄에서 수행 할 작업 인 종료 상태를 확인합니다.
- 2 행-변수$? 이전에 실행 한 명령의 종료 상태를 유지합니다(이 경우 테스트). 0 은 참(또는 성공)을 의미합니다. 1=거짓(또는 실패).,
- 4 행-이번에는 수치 비교를 수행하고 있습니다.
- 7 행-새 빈 파일 myfile 을 만듭니다(myfile 이 이미 존재하지 않는다고 가정).
- 8 행-myfile 의 크기가 0 보다 큽니까?
- 11 행-일부 콘텐츠를 myfile 로 리디렉션하여 크기가 0 보다 큽니다.
- 12 행-myfile 의 크기를 다시 테스트하십시오. 이번에는 사실입니다.
들여 쓰기
위의 if 문에서 문이 true 인 경우 실행 된 명령을 들여 쓴 것을 알 수 있습니다., 이것은 들여 쓰기라고하며(Bash 스크립트뿐만 아니라 모든 언어로)훌륭하고 깨끗한 코드를 작성하는 데 중요한 부분입니다. 목표는 가독성을 향상시키고 우리가 단순하고 어리석은 실수를 저지르는 것을 어렵게 만드는 것입니다. 이 없에 관한 규칙에서 들여쓰기 강타할 수 있도록을 들여쓰기 또는지 들여쓰기 그러나 당신과 당신의 스크립트가 아직도 실행이 정확히 동일합니다. I would highly recommend 당신은 코드를 들여쓰기 그러나(특히 스크립트를 얻는 큰)그렇지 않으면 당신은 그것을 찾을 점점 더 어려워 보이 구조에서 스크립트가 있습니다.,
중첩 If 문
들여 쓰기의 이야기. 그것이 당신을 위해 인생을 더 쉽게 만들 때의 완벽한 예가 있습니다. 스크립트 내부에 필요한만큼 if 문을 가질 수 있습니다. 또한 다른 if 문 안에 if 문을 가질 수도 있습니다. 예를 들어,우리는 분석하고자하는 번호는 명령행에는 다음과 같이
그것은 인생이야:
- 선 4-다음의 경우에만 첫 번째 명령 라인에 인수가 더 이상 100 이다.
- 8 행-이것은 if 문에 가벼운 변형입니다., 우리가 식을 확인하고 싶다면 우리는 변수에 대해했던 것처럼 이중 괄호를 사용할 수 있습니다.
- 10 행-if 문이 모두 true 인 경우에만 실행됩니다.
Yo dawg,나는 if 문을 좋아해서 if 문을 당신의 if 문 안에 넣었습니다.
엑
(엑 사실을 말하지 않았지만 난 그는 것,그는 호주 내 Bash 스크립트입니다.,)
할 수 있습지는 경우 많은 문으로 당신이 좋아하지만,일반적으로는 엄지 손가락의 규칙이 필요하신 경우에는 둥지를 더 이상 3 이상 수준이 있어야 합하는지 생각해 reorganising 의 논리입니다.
If Else
때로는 문이 true 인 경우 특정 작업 집합을 수행하고 false 인 경우 다른 작업 집합을 수행하려고합니다. 우리는 다른 메커니즘으로 이것을 수용 할 수 있습니다.,
경우
그리고
<명령>
다.
<기타 명령>
fi
이제 우리는 쉽게 파일에서 읽은 경우 제공된 명령줄 인수로,다른 표준입력으로 읽는다.
else.sh
- #!/bin/bash
- #else 예
- 경우
- 그리고
- nl$1
- 다른
- nl/dev/stdin
- fi
경우 Elif 다른
때때로 우리는 일련의 조건으로 이어질 수 있는 다른 경로입니다.,
경우
그리고
<명령>
elif
그리고
<다른 명령>
다.
<기타 명령>
fi
예를 들어 있는 경우는 경우에 당신은 18 세 이상이라도 이용하실 수 있습니다. 당신이 아니지만 부모님의 편지를 가지고 있다면 당신은 갈 수 있지만 자정 전에 다시해야합니다. 그렇지 않으면 갈 수 없습니다.
원하는만큼 elif 지점을 가질 수 있습니다. 최종 다른 것도 선택 사항입니다.,
부울 연산
때로는 여러 조건이 충족되는 경우에만 무언가를하고 싶습니다. 다른 시간에 우리는 여러 조건 중 하나가 충족되면 작업을 수행하고 싶습니다. 우리는 부울 연산자로 이들을 수용 할 수 있습니다.
- 및&&
- 나-||
예를 들어 어쩌면 우리는 작업을 수행하려면 파일을 읽을 수 있는 크기보다 큰니다.
and.sh
- #!,/bin/bash
- #고 예
- 경우&&
- 그리고
- echo 이 파일은 유용합니다.
- fi
어쩌면 사용자가 bob 또는 andy 인 경우 약간 다른 것을 수행하고 싶을 것입니다.
or.sh
- #!/bin/bash
- #또는 예
- 경우||
- 그리고
- ls-alh
- 다른
- ls
- fi
경우 문
때때로 우리는 할 수 있는 다른 경로에 따라 변수가 일치하는 시리즈입니다., 우리는 일련의 if 및 elif 진술을 사용할 수 있지만 곧 unweildly 로 성장할 것입니다. 다행히도 물건을 더 깨끗하게 만들 수있는 사례 진술이 있습니다., It’s a little hard to explain so here are some examples to illustrate:
case <variable> in
<pattern 1>)
<commands>
;;
<pattern 2>)
<other commands>
;;
esac
Here is a basic example:
case.sh
- #!,/bin/bash
- #케이스를 들어
- 경우$1
- 시작)
- echo 시작
- ;;
- 중지)
- echo 슷
- ;;
- 시)
- echo 다시 시작
- ;;
- *)
- echo don’t know
- ;;
- esac
그것은 인생이야:
- 선 4-이 라인을 시작합 casemechanism.
- 5 행-$1 이’시작’과 같으면 후속 작업을 수행하십시오. )는 패턴의 끝을 의미합니다.,
- 7 행-이 명령문 세트의 끝을 이중 세미콜론(;;)으로 식별합니다. 이 다음에 고려해야 할 다음 사례입니다.
- 14 행-각 경우에 대한 테스트가 패턴임을 기억하십시오. *는 임의의 문자 수를 나타냅니다. 그것은 essentialy 다른 경우 중 어느 것도 일치하지 않는 경우에 대한 모든 경우 캐치입니다. 그것은 필요하지 않지만 자주 사용됩니다.
- 17 행-esac 는 대/소문자이며 case 문의 끝에 있음을 나타냅니다. 이 이후의 다른 문은 정상적으로 실행됩니다.
- ./case.sh 시작
- 시작
- .,/case.sh 다시 시작
- 다시 시작
- ./case.sh blah
- 알지 못
지금의 모습에서 조금 더 복잡한 예제는 본 사용되는 조금 더 있습니다.
요약
활동
이제 몇 가지 결정을 내리겠습니다.
- 명령 줄 인수로 2 개의 숫자를 취할 Bash 스크립트를 만듭니다. 그것은 두 개의 숫자 중 더 큰 화면에 인쇄됩니다.,
- 파일을 명령 줄 인수로 받아들이고 특정 방식으로 분석하는 Bash 스크립트를 만듭니다. 예. 파일이 실행 가능한지 또는 쓰기 가능한지 확인할 수 있습니다. True 인 경우 특정 메시지를 인쇄하고 false 인 경우 다른 메시지를 인쇄해야합니다.
- 어떤 요일에 따라 메시지를 인쇄 할 Bash 스크립트를 만듭니다(예:. ‘Happy hump day’For Wedensday,’tgif’for Friday 등).