![이 명령은 무엇을 의미합니까?](https://linux55.com/image/21008/%EC%9D%B4%20%EB%AA%85%EB%A0%B9%EC%9D%80%20%EB%AC%B4%EC%97%87%EC%9D%84%20%EC%9D%98%EB%AF%B8%ED%95%A9%EB%8B%88%EA%B9%8C%3F.png)
이러한 명령을 보다 직접적으로 읽을 수 있는 방법은 무엇입니까?
왜 exit 255
안 돼 exit 1
?
[ $# -eq 3 ] || { echo error ; exit 255 ; }
grep -q "string" && exit 0
답변1
다른 사람들은 이것이 명령줄 인수의 수라고 언급했기 $#
때문에 귀하의 질문에서 해당 부분을 무시하겠습니다.
주어진cmd1 && cmd2
, 쉘이 먼저 실행됩니다 cmd1
. 실패 하면 cmd1
전체 표현식이 실패합니다. 성공 하면 cmd1
쉘이 계속 실행됩니다 cmd2
. 다음과 같은 경우 전체 표현식이 성공합니다.둘 다 cmd1
성공 cmd2
했습니다. 따라서 이 &&
연산자는 쉘 명령에 적용되는 단락 부울 AND입니다. 이 연산자의 사용은 다음으로 대체될 수 있습니다.
if cmd1
then
cmd2
fi
주어진cmd1 || cmd2
, 쉘이 먼저 실행됩니다 cmd1
. 성공하면 전체 표현식이 성공합니다. 그렇지 않으면 쉘이 실행 cmd2
되고 표현식의 성공 또는 실패가 결정됩니다 cmd2
. 즉, 이는 쉘 명령에 적용되는 단락 부울 OR입니다. 이 양식을 다음으로 대체할 수 있습니다.
if ! cmd1
then
cmd2
fi
나는 이 문구를 신중하게 사용한다성공적인/성공그리고실패/실패하다이상. 쉘 명령의 경우 성공은 프로세스 종료 상태 0으로 정의됩니다. 실패는 0이 아닌 상태입니다. 그러나 종료 상태에서 AND 연산자를 이해하려고 하면 &&
적어도 나에게는 혼란스럽습니다. 왜냐하면 이상한 종류의 역논리로 끝나기 때문입니다.||
답변2
실제로는 매우 간단합니다.
스크립트는 정확히 3개의 매개변수가 있는지 확인합니다. 이것이 바로 이 [ $# -eq 3 ]
부분입니다. 그렇지 않은 경우 해당 { echo error ; exit 255 ; }
부분이 실행됩니다. 종료 코드 255는 특별한 의미를 갖고 있습니다. 이는 "종료 상태가 범위를 벗어남"을 의미합니다.바라보다여기. 여기서는 약간의 오용이 있다고 생각하지만 가능합니다.
답변3
$#~이다매개변수 수껍질에. 따라서 첫 번째 줄에는 "3개의 인수가 없으면 종료"라고 나와 있습니다. 왜냐하면 오른쪽 부분(in||)는 왼쪽 부분이 참이 아닌 경우에만 실행됩니다.||논리적이다또는.
255를 반환 코드로 임의로 지정할 수 있습니다.
스크립트가 반환됩니다.0, 입력에 "string"이라는 단어가 포함된 경우.
이것이 도움이 됩니까?
답변4
입력에 "문자열"이 포함되어 있으면 명령이 포함된 줄에서 grep
이 작업을 수행하고 , exit 0
그렇지 않으면 종료 코드는 1이 됩니다. 보다 명확한 접근 방식은 다음과 같습니다.
grep -q "string"
if [ $? -eq 0 ]
then
exit 0
else
exit 1
fi