에서 bash
때로는 여러 명령을 직렬로 실행하고 새 명령을 입력하기 전에 명령이 완료되기를 기다리지 않습니다. 그래서 나는 이런 식으로합니다 :
cmd1; cmd2; cmd3
불행하게도, 명령 중 하나가 실패 할 수 있습니다. 이 경우에는 중지하고 싶습니다. 이 작업을 수행하는 쉬운 방법이 있습니까?하지만 이전 명령에 0 종료 코드가있는 경우에만 명령을 계속 실행하도록 만드십시오.
답변
&&
연산자 사용
cmd1 && cmd2 && cmd3
shellscripting에서 &&
와 ||
연산자 C. 된 논리 연산자의 최적화 된 구현 후 모델링 &&
수단 및 조작자 및 ||
수단 OR. 유닉스는 C와 밀접하게 관련되어 있으며 C에서는 논리 연산자의 두 번째 피연산자가 결과가 첫 번째 피연산자로부터 이미 알려진 경우 평가되지 않습니다. 예를 들면 "false && x"
이다 false
어떤을 위해 x
, 그래서 평가를 할 필요가 없습니다 x
(특히 x
함수 호출됩니다) 비슷합니다 "true || x"
. 이를 단락 시맨틱 이라고도 합니다.
유닉스에서는 명령의 반환 값을 “성공적인 완료”진실 값으로 해석하는 것이 일반적입니다. 종료 코드 0은 true
(성공), 0이 아닌 의미 false
(실패)를 의미 합니다. 따라서 첫 번째 명령이 cmd1 && cmd2
리턴 되면 "false"
(제로가 아닌 종료 상태, 실패를 나타냄) 복합 명령의 상태는 실패입니다. 따라서 cmd1 && cmd2
“execute cmd1
, ANDNN (실패하지 않은 경우) ” 으로 해석 cmd2
됩니다. 질문에서 기본적으로 원하는 것은 무엇입니까?
OR :와 마찬가지로 cmd1 || cmd2
“execute cmd1
, OR IF failure “로 해석 될 수 있습니다 cmd2
.
팁 : 더 긴 체인을 사용하려면 스크립트를 &&
넣는 것이 set -e
좋습니다. 기본적으로 세미콜론 은 몇 가지 특수한 경우 ;
로로 바뀝니다 &&
.
답변
“채 이닝 명령으로 그룹화”
ping 192.168.0.1 || { echo "ping not successful"; exit 1; }
ping은 성공하지 못한 경우에만 체인으로 묶인 명령 그룹을 괄호 안에 실행합니다.
주의:
목록은 “;”으로 끝나야합니다.
대괄호와 그룹화 된 명령 사이에는 공백이 있어야합니다!
답변
&&
운영자 와 간단하게 . 예를 들어 :
cmd1 && cmd2 && cmd3
명령 중 하나가 실패하면 (0 이외의 종료 값을 반환) 다른 명령은 실행되지 않습니다.