シェルスクリプト(/ bin/shまたは/ bin/bash)にいくつかのコマンドが含まれているとします。コマンドのいずれかに失敗した終了ステータスがある場合、スクリプトをきれいに終了させるにはどうすればよいですか?明らかに、ifブロックやコールバックを使用できますが、より簡潔で簡潔な方法はありますか?コマンドが長くなる場合や、スクリプトにループや条件などの重要な機能が含まれる場合があるため、&&の使用も実際にはオプションではありません。
標準のsh
およびbash
では、次のことができます
set -e
そうなる
$ help set
...
-e Exit immediately if a command exits with a non-zero status.
(私が集めることができるものから)zsh
でも機能します。また、Bourne Shellの子孫でも機能するはずです。
csh
/tcsh
では、#!/bin/csh -e
を使用してスクリプトを起動する必要があります
あなたが使うことができるかもしれません:
$ <any_command> || exit 1
あなたは$をチェックできますか?最新の終了コードを確認するには..
例えば
#!/bin/sh
# A Tidier approach
check_errs()
{
# Function. Parameter 1 is the return code
# Para. 2 is text to display on failure.
if [ "${1}" -ne "0" ]; then
echo "ERROR # ${1} : ${2}"
# as a bonus, make our script exit with the right error code.
exit ${1}
fi
}
### main script starts here ###
grep "^${1}:" /etc/passwd > /dev/null 2>&1
check_errs $? "User ${1} not found in /etc/passwd"
USERNAME=`grep "^${1}:" /etc/passwd|cut -d":" -f1`
check_errs $? "Cut returned an error"
echo "USERNAME: $USERNAME"
check_errs $? "echo returned an error - very strange!"