조건이 충족되면 sh 스크립트를 종료합니다.

조건이 충족되면 sh 스크립트를 종료합니다.

어쩌면 이것은 멍청한 질문일지도 모르지만 저는 sh 스크립트를 처음 접했고 제 논리가 올바른지 확인하기 위해 약 2시간을 기다려야 했기 때문에 여기에 질문하고 싶었습니다.

특정 파일의 줄 번호를 가져오는 sh 스크립트가 있습니다. 조건이 충족되면 전체 sh 스크립트가 종료/중지되어야 합니다.

if [wc -l "$file_data" -lt 2000]; then
        echo "does not meet minimum requirements"
        exit -1

exit 0아니면 을 선택 해야 할지 모르겠습니다 exit 1.exit -1

답변1

논리는 정확하지만 구문이 올바르지 않습니다.

if [ "$(wc -l <"$file_data")" -lt 2000 ]; then
    echo 'Error error' >&2
    exit 1
fi
  1. []앞뒤에 각각 공백이 필요합니다 . [별도의 명령이고 ]명령의 마지막 매개변수여야 하므로 공백이 필요합니다 .

  2. 명령의 출력은 명령 대체를 통해 문자열로 대체될 수 있습니다 $(...). 위 테스트에서는 명령 대체를 사용하여 파일의 줄 수를 계산했습니다. 결과는 문자열에 삽입되어 숫자 2000과 비교됩니다. 파일의 데이터를 로 리디렉션합니다 wc -l. 즉, 출력에서 ​​파일 이름을 제거할 필요가 없습니다 wc.

  3. 종료 상태는 성공 시 0이어야 하고 실패 시 1에서 127 사이의 0이 아닌 정수여야 합니다. 0이 아닌 것 외에 이 숫자는 코드에 의해 할당된 의미 외에는 본질적인 의미가 없습니다. 일부 도구는 다른 숫자를 사용하여 다른 오류 조건을 지정합니다. curl("종료 코드" 섹션) 및 rsync("종료 값" 섹션)에 대한 설명서를 참조하세요. 대부분의 도구는 1실패 신호 에만 사용됩니다 .

  4. 진단 메시지, 오류 등은 표준 오류 스트림으로 출력되어야 합니다. 리디렉션을 통해 이 작업을 수행할 수 있습니다 >&2. 이렇게 하면 출력에 오류 메시지가 섞이지 않고 진단 메시지에서 스크립트의 일반 출력이 분리됩니다. 같은 이유로 대화형 프롬프트, 질문 등도 표준 오류 스트림으로 출력됩니다.

  5. 진술은 if으로 끝납니다 fi.

또한보십시오https://www.shellcheck.net/웹사이트는 가장 기본적인 오류를 찾는 데 도움이 되는 도구를 제공합니다.

관련 정보