在shell脚本中捕获失败

时间:2013-06-04 13:34:04

标签: bash shell unix

shell脚本的新手。我正在尝试执行以下操作:

#!/bin/bash

unzip myfile.zip

#do stuff if unzip successful

我知道我可以使用&&将命令链接在一起,但是有很多块,它不会非常可维护。

4 个答案:

答案 0 :(得分:12)

您可以在测试中明确使用命令的退出状态:

if ! unzip myfile.zip &> /dev/null; then
    # handle error
fi

答案 1 :(得分: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

答案 2 :(得分:5)

变量$?包含上一个命令的退出状态。 (大多数)命令的成功退出状态(通常)为0,因此只需检查...

#!/bin/bash
unzip myfile.zip

if [ $? == 0 ]
then
    # Do something
fi

答案 3 :(得分:4)

如果您希望shell检查已执行命令的结果并在某些内容返回非零值时停止解释,则可以添加set -e,这意味着如果命令以非零值退出则立即退出状态。我经常在脚本中使用它。

#!/bin/sh

set -e

# here goes the rest