다음 스크립트가 있는데 x 줄에 오류가 발생하면 스크립트가 x 줄에서 실행을 중지하도록하고 싶습니다. 어떻게합니까?쉘 스크립트 중지 오류
pvcreate /dev/$1 vgextend VolGroup00 /dev/$1 lvextend --size +$2 /dev/VolGroup00/LogVol00 resize2fs /dev/VolGroup00/LogVol00
다음 스크립트가 있는데 x 줄에 오류가 발생하면 스크립트가 x 줄에서 실행을 중지하도록하고 싶습니다. 어떻게합니까?쉘 스크립트 중지 오류
pvcreate /dev/$1 vgextend VolGroup00 /dev/$1 lvextend --size +$2 /dev/VolGroup00/LogVol00 resize2fs /dev/VolGroup00/LogVol00
이 부분을 실행하기 전에 set -e
을 사용해야합니다.
다음을 맨 위에 추가하십시오.
해당 행을 실행하면 오류 코드가 반환되면 쉘이 종료됩니다. set +e
은이 기능을 다시 사용 중지합니다 (오류 반환 코드와 상관없이 계속 전환).
자세한 내용은 http://www.davidpashley.com/articles/writing-robust-shell-scripts.html을 참조하십시오.
반환 코드를 확인하려면 각 단계를 쿼리해야합니다. 즉, 각 조회에 대한 리턴 코드가 무엇인지 이해해야합니다 (각각 다를 수도 있음). 아래 예제에서는 vgextend에서 오류 코드 -1을 확인한 다음 -1을 반환합니다.
pvcreate /dev/$1
vgextend VolGroup00 /dev/$1
if [ $? == -1 ]; then
echo "vgextend returned an error"
exit -1;
fi
lvextend --size +$2 /dev/VolGroup00/LogVol00
resize2fs /dev/VolGroup00/LogVol00
일부 상황에서는 일부 오류가 허용 될 수 있으므로 -e가 과도 할 수 있습니다. 아래 예에서 파일이 존재하지 않으면 rm은 오류를 반환하지만 계속 진행할 수 있습니다 (예, 조건부 삭제가 가능하다는 것을 알고 있지만 예제는 작성 시점을 설명하기위한 것입니다).
# delete the file, it it exists
rm thefile
# create the file
touch thefile
'rm somefile || '과 같이 이러한 가능성이있는 명령을 별도로 표시하는 것이 좋습니다. 사실 '. 이 경우'set -e'는 실행되지 않습니다. –