我在许多Shell脚本中都看到了这种模式,其中包括来自知名厂商的指导书,教程和生产脚本。
command
if [ $? -eq 0 ]; then
things
fi
Run Code Online (Sandbox Code Playgroud)
但是我被告知这是一种反模式。这是为什么?我应该怎么用呢?
Shell脚本通常由不太熟悉该语言的人编写。即使在名义上会收到大量审查,审查和现场测试的脚本中,这也需要大量复制/粘贴代码。
的真正目的壳的流控制语句是运行一个命令并检查其退出代码。换句话说,if已经做到了这一点。在这个例子中,它运行[ $? -eq 0 ]和检查从退出代码是否那是零(指示成功) -如果是这样,它运行的then分支,否则,else分支。
因此,重申一下,任何看起来像
command
if [ $? -eq 0 ]
Run Code Online (Sandbox Code Playgroud)
更好地表达为
if command
Run Code Online (Sandbox Code Playgroud)
当然,在某些情况下,您需要关心特定的非零退出代码。然后,您必须检查甚至复制(的值,$?因为一旦您运行另一个外部命令,它将被重置为另一个命令的退出代码)。但是检查它是否为零通常是多余的,并且证明了对shell语法的不完全了解。
同样,while运行命令并检查其退出代码。如果它不为零,则放弃循环,并在相应的done语句之后继续执行。
| 归档时间: |
|
| 查看次数: |
71 次 |
| 最近记录: |