7

シェルスクリプトの初心者です。私は次のことをしようとしています:

#!/bin/bash

unzip myfile.zip

#do stuff if unzip successful

コマンドを連鎖させることができることはわかっています&&が、かなりのチャンクがあり、メンテナンスが非常に困難です。

4

4 に答える 4

12

コマンドの終了ステータスをテストで明示的に使用できます。

if ! unzip myfile.zip &> /dev/null; then
    # handle error
fi
于 2013-06-04T13:44:20.243 に答える
10

使用できます$?。戻り値:
- コマンドが正常に実行された場合は 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
于 2013-06-04T13:35:54.853 に答える
5

変数$?には、前のコマンドの終了ステータスが含まれます。(ほとんどの) コマンドの成功終了ステータスは (通常) 0 なので、それを確認してください...

#!/bin/bash
unzip myfile.zip

if [ $? == 0 ]
then
    # Do something
fi
于 2013-06-04T13:38:54.557 に答える
4

シェルが実行されたコマンドの結果をチェックし、何かがゼロ以外の値を返したときに解釈を停止するようにしたい場合は、追加できます。これは、コマンドがゼロ以外のステータスで終了した場合にすぐに終了するset -eことを意味します。私はこれをスクリプトでよく使用しています。

#!/bin/sh

set -e

# here goes the rest
于 2013-06-04T13:47:16.797 に答える