次のコードがあります。
debug=$?
function a {
su - javi -c "uptime"
return $debug
}
function b {
su - javi -c "cat /etc/redhat-release"
return $debug
}
function c {
su - javi -c "cat /etc/redhat-release"
return $debug
}
case $debug in
0)
a
if [ $debug == 0 ]; then
b
echo "se ejcuta la funcion"
elif [ $debug == 0 ]
c
elif[].... <-----this
fi
;;
1)
echo "se ha producido un error"
;;
esac
ifを削除してデバッグする方法はありますか?私は彼らが関数を実行したいと思うし、それがうまくいったら他の関数にジャンプし、悪く終わったらスクリプトを残します。つまり、5つの関数があります
答え1
各機能を実行してエラーを防ぐことが目標である場合は、次のように機能します。
function bail {
echo "se ha producido un error ($1)"
exit 1
}
function a {
uptime
}
function b {
cat /etc/redhat-release
}
function c {
cat /etc/redhat-release
}
for f in 'a' 'b' 'c'; do
$f || bail "$f: $?"
done
これは各関数を実行し、エラーが発生すると関数名と終了コードが関数に送信され、1行を印刷してbail
別のコマンドを終了します。
su
テストするのが簡単なので、使用を削除しました。これを自動化するには、sudo プロファイルを作成して高い権限でこれらのコマンドを実行することをお勧めします。これにより、パスワードを一度だけ入力したり、まったく入力する必要はありません。
答え2
debug=$?
すべてのコマンドで評価されるわけではありません。したがって、値はdebug
スクリプト全体で同じです。- 関数の戻りコードは、最後のコマンドの戻りコードです。したがって、return文は意味がありません。
要約すると、このようなタスクはa && b && c
成功すると実行され、成功すると実行されます。この複合コマンドの戻りコードは、各関数のゼロ以外の最初の戻りコードです。b
a
c
b