シェルスクリプトの初心者です。私は次のことをしようとしています:
#!/bin/bash
unzip myfile.zip
#do stuff if unzip successful
コマンドを連鎖させることができることはわかっています&&
が、かなりのチャンクがあり、メンテナンスが非常に困難です。
コマンドの終了ステータスをテストで明示的に使用できます。
if ! unzip myfile.zip &> /dev/null; then
# handle error
fi
使用できます$?
。戻り値:
- コマンドが正常に実行された場合は 0。
- コマンドが失敗した場合は !0。
だからあなたはすることができます
#!/bin/bash
unzip myfile.zip
if [ "$?" -eq 0 ]; then
#do stuff on unzip successful
fi
$ cat a
hello
$ echo $?
0
$ cat b
cat: b: No such file or directory
$ echo $?
1
変数$?
には、前のコマンドの終了ステータスが含まれます。(ほとんどの) コマンドの成功終了ステータスは (通常) 0 なので、それを確認してください...
#!/bin/bash
unzip myfile.zip
if [ $? == 0 ]
then
# Do something
fi
シェルが実行されたコマンドの結果をチェックし、何かがゼロ以外の値を返したときに解釈を停止するようにしたい場合は、追加できます。これは、コマンドがゼロ以外のステータスで終了した場合にすぐに終了するset -e
ことを意味します。私はこれをスクリプトでよく使用しています。
#!/bin/sh
set -e
# here goes the rest