[Bash] 쉘 명령에서 "&&"의 목적은 무엇입니까?


Answers

&& 는 이전 명령이 성공적으로 완료되었는지 여부에 따라 작업을 수행 할 수있게하므로 do_something && do_something_else_that_depended_on_something 연결되는 것을 볼 수 있습니다.

Question

내가 아는 한, 명령을 사용하면 백그라운드에서 실행하는 것입니다.

사용 예 : tar -czf file.tar.gz dirname &

그러나 && 어떨까요? (이 예를보십시오 : https://serverfault.com/questions/215179/centos-100-disk-full-how-to-remove-log-files-history-etc#answer-215188 )




'&&'의 일반적인 사용법은 autotools로 소프트웨어를 컴파일하는 것입니다. 예 :

./configure --prefix=/usr && make && sudo make install

기본적으로 configure가 성공하면 make가 실행되어 컴파일되고, 성공하면 make가 root로 실행되어 프로그램을 설치합니다. 나는 대부분이 일을 할 것이라고 확신 할 때 이것을 사용하고, 를 보면서 진도를 모니터하지 않는 것과 같은 다른 중요한 일을 할 수있게 해준다.

가끔은 정말 흥분하고 ...

tar xf package.tar.gz && ( cd package; ./configure && make && sudo make install ) && rm package -rf

예를 들어 스크래치 박스에서 리눅스를 만들 때 나는 이것을한다.




명령 줄 - && 의 목적은 무엇입니까?

껍질에, 당신이 볼 때

$ command one && command two

첫 번째 명령이 성공한 경우에만 && 다음에 나오는 명령을 실행합니다. 이것은 포시 껍질의 관용적이며 배쉬에서만 볼 수있는 것이 아닙니다.

첫 번째 프로세스가 실패 할 경우 두 번째 프로세스의 실행을 막으려 고합니다.

프로세스는 참이면 0, 거짓이면 다른 양수를 반환합니다.

프로그램은 종료 할 때 signal 를 반환합니다. 성공할 경우 0을 반환하고 그렇지 않은 경우 0 이상을 반환해야합니다. 이렇게하면 프로세스간에 제한된 양의 통신이 가능합니다.

POSIX 쉘 문법 에서 &&AND_IFAND_IF , 명령의 and_or 목록 의 일부이며 || 비슷한 의미를 갖는 OR_IF 이다.

문법 기호 :

%token  AND_IF    OR_IF    DSEMI
/*      '&&'      '||'     ';;'    */

문법:

and_or           :                         pipeline
                 | and_or AND_IF linebreak pipeline
                 | and_or OR_IF  linebreak pipeline

두 연산자는 동일한 우선 순위를 가지며 왼쪽에서 오른쪽으로 평가됩니다 (왼쪽 연관). 예를 들어 다음과 같습니다.

$ false && echo foo || echo bar
$ true || echo foo && echo bar

둘 다 에코 만 bar 합니다.

  1. 첫 번째 경우 false는 1 의 상태로 종료되는 명령입니다.

    $ false
    $ echo $?
    1
    

    이는 echo foo 가 실행되지 않는다는 것을 의미 합니다 (즉, echo foo 단락 시킴). 그런 다음 명령 echo bar 실행됩니다.

  2. 두 번째 경우에는 코드 0 true가 종료됩니다.

    $ true
    $ echo $?
    0
    

    따라서 echo foo 가 실행되지 않으면 echo bar 가 실행됩니다.




&& strings 명령을 함께 사용하십시오. 후속 명령이 성공할 경우에만 연속 명령이 실행됩니다.

마찬가지로, || 앞의 명령이 실패 할 경우 연속 명령을 실행할 수 있습니다.

Bash 쉘 프로그래밍을 참조하십시오.




다음 예제를 참조하십시오.

mkdir test && echo "Something" > test/file

쉘은 디렉토리 test 를 만들려고 시도하고 성공한 경우에만 내부에 파일 만들기를 시도합니다.

따라서 하나의 단계가 실패하면 일련의 단계가 중단 될 수 있습니다.




첫 번째 명령문이 성공적으로 끝나면 두 번째 명령문을 실행합니다. if 문처럼 :

 if (1 == 1 && 2 == 2)
  echo "test;"

첫 번째는 1 == 1이면 시도하고, 참이면 2 == 2인지 확인합니다.




게다가, 당신은 또한 || 이것은 논리적 인 또는 또는 또한 ; 이것은 전에 명령에 무슨 일이 생겼는지 상관하지 않는 구분 기호입니다.

$ false || echo "Oops, fail"
Oops fail

$ true || echo "Will not be printed"
$  

$ true && echo "Things went well"
Things went well

$ false ; echo "This will always run"
This will always run

이에 대한 자세한 내용은 여기 Bash 매뉴얼 의 명령 목록을 참조하십시오.




command_1 && command_2 : command_1이 성공적으로 실행될 때만 command_2를 실행하십시오.

command_1 || command_2 command_1 || command_2 : command_1이 성공적으로 실행되지 않은 경우에만 command_2를 실행하십시오.

if (condition_1 && condition_2){...} condition_1이 false 이면 if_2가 생략되고 if (condition_1 || condition_2){...} 처럼 주류 프로그래밍 언어에서 'if'조건이 어떻게 실행되는지와 비슷한 느낌을줍니다 if (condition_1 || condition_2){...} condition_2가 생략되면 condition_2가 생략됩니다. 코드 작성에 사용하는 것과 동일한 트릭입니다. :)