이 명령은 무엇을 의미합니까?

이 명령은 무엇을 의미합니까?

이러한 명령을 보다 직접적으로 읽을 수 있는 방법은 무엇입니까?

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

관련 정보