7

对 shell 脚本来说相当新。我正在尝试执行以下操作:

#!/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

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

#!/bin/sh

set -e

# here goes the rest
于 2013-06-04T13:47:16.797 回答