在shell脚本中捕获失败

Mil*_*uzz 7 unix bash shell

对shell脚本来说很新.我正在尝试执行以下操作:

#!/bin/bash

unzip myfile.zip

#do stuff if unzip successful
Run Code Online (Sandbox Code Playgroud)

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

小智 12

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

if ! unzip myfile.zip &> /dev/null; then
    # handle error
fi
Run Code Online (Sandbox Code Playgroud)


fed*_*qui 10

你可以用$?.它返回:
- 如果命令成功执行,则返回0.
- !0如果命令不成功.

所以你可以做到

#!/bin/bash

unzip myfile.zip

if [ "$?" -eq 0 ]; then
    #do stuff on unzip successful
fi
Run Code Online (Sandbox Code Playgroud)

如果出现错误,您甚至可以使用此:

$ cat a
hello
$ echo $?
0
$ cat b
cat: b: No such file or directory
$ echo $?
1
Run Code Online (Sandbox Code Playgroud)

测试

#!/bin/bash

unzip myfile.zip

if [ "$?" -eq 0 ]; then
    #do stuff on unzip successful
fi
Run Code Online (Sandbox Code Playgroud)


小智 5

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

#!/bin/bash
unzip myfile.zip

if [ $? == 0 ]
then
    # Do something
fi
Run Code Online (Sandbox Code Playgroud)