オプションのパラメータを印刷する関数を作成します。
stop()
{
if [ $# -gt 0 ]; then
echo "Failed: [email protected]"
else
echo "Failed."
fi
exit 1
}
多くのコードを書きたくない場合は、パラメータなしでこの機能を使用できます。
cd /home/lin || stop
mkdir logs || stop
cp /tmp/filelog.log logs/ || stop
rm /tmp/log* || stop
touch /tmp/log || stop
echo Success
あなたはそれにもっと力を入れることができます。
最初のコマンドは、stderrをフェッチして出力に使用する方法を示しています。
errmsg=$(cd /home/lin 2>&1) || stop ${errmsg}
# You do not want an error when the dir already exists
mkdir -p logs || stop
# You can test in front
test -f /tmp/filelog.log || stop File filelog.log not found
cp /tmp/filelog.log logs/ || stop
rm -f /tmp/log* || stop
touch /tmp/log || stop
echo Success
他の可能性はset -e
を使用して(障害発生後に終了しますが、「失敗」のメッセージを持っていません)、これは@Kusalanandaと@HenkLangeveldの答えに示されています。
やコマンドのチェーンます-e
(errexit
)シェルオプションはシェルを終了させるときERR
トラップが実行さ
#!/bin/bash
set -e
trap 'echo FAILED' ERR
mkdir test/test
# etc.
echo 'SUCCESS'
:
cd /home/lin &&
mkdir -p logs &&
test -f /tmp/filelog.log &&
cp /tmp/filelog.log logs/ &&
rm -f /tmp/log* &&
touch /tmp/log || stop
透き通った:) –
私はそれをテストし、それが動作しませんでしたが私のために。そして、(要件ではない)サブシェルに設定されたvariabeleは失われます。 –