각 명령의 결과를 테스트하기 위해 HUSH 쉘 스크립트를 어떻게 작성합니까?

각 명령의 결과를 테스트하기 위해 HUSH 쉘 스크립트를 어떻게 작성합니까?

이 스크립트가 명령 상태를 확인하고 실패 시 종료되도록 하려면 어떻게 해야 합니까?

#!/bin/sh
echo JFFS2 Preparation

cd /root

/root/config 1 > /root/formatted

if grep "PAR_JFFS2_FORMATTED = -1" /root/formatted; then
  echo Need to Format MTD2
  rm -f /root/formatted

  flash_eraseall -j /dev/mtd2

  echo Marking file system as formatted
  /root/config 1 1355270400

  mount -t jffs2 -o noatime /dev/mtdblock2 /mnt

  echo "Formmatted" > /mnt/formatted.txt

else
  mount -t jffs2 -o noatime /dev/mtdblock2 /mnt
fi

답변1

set -e이를 스크립트 앞부분에 추가하거나 #!줄을 로 변경 #!/bin/sh -e하면 동일한 효과가 나타납니다.

이는 errexit쉘 옵션을 설정합니다. 즉, 다음 예외를 제외하고 명령이 0이 아닌 종료 상태를 반환하는 즉시 스크립트가 종료됩니다(에서 가져옴).POSIX 설명set):

  1. 다중 명령 파이프라인에서 단일 명령이 실패하더라도 셸이 종료되어서는 안 됩니다. 파이프라인 자체의 오류만 고려됩니다.

  2. -e, 또는 예약어 뒤의 복합 목록, 예약어로 시작하는 파이프 또는 마지막 AND-OR 목록을 제외한 모든 명령을 실행할 때 이 설정은 무시되어야 합니다.whileuntilifelif!

  3. -e이는 종료 상태가 무시 시 실패의 결과인 경우 하위 쉘 명령 이외의 -e복합 명령에는 적용되지 않습니다 .

|| exit또 다른 방법은 각 명령 뒤에 실패할 경우 종료하려는 명령을 추가하는 것입니다 . 예를 들어

flash_eraseall -j /dev/mtd2 || exit

답변2

Bash의 모든 명령 이후의 반환 코드는 $?변수에 저장됩니다. 명령이 성공한 경우 해당 값은 다음과 같아야 합니다.

successfulcommand    
echo $?
0

오류가 발생하면 결과는 0이 아니며 오류에 따라 달라집니다.

unsuccessfulcommand
echo $?
2

관련 정보