在学习了一些关于 Bash的知识后,我发现了使用 if语句的四种方法:
if
Bash 中括号和方括号的区别是什么。
你列出的测试:
test
不是详尽的,你可以使用 布尔逻辑
if command; then ...
在 bash中,0是 true,> 0是 false。
bash
0
true
false
您可以看到退出状态如下:
command echo $?
参见:
Http://wiki.bash-hackers.org/syntax/basicgrammar Http://wiki.bash-hackers.org/syntax/arith_expr Http://mywiki.wooledge.org/bashguide/testsandconditionals
Shell 本身只运行命令并计算其退出代码。零退出代码表示成功; 所有其他值表示失败。
if command; then : things to do if the exit code from command was 0 else : things to do if it was not 0 fi while command; do : things to do if the exit code was 0 done
命令 [(又名 test)在条件句中非常常用,因为原始的 Bourne shell 缺乏检查字符串是否为空或文件是否存在的内置操作符。现代的 shell 内置了这个命令,并且许多 shell 有一个扩展的、现代化的版本 [[,但是这不能适当地移植到 POSIX sh,因此应该避免移植脚本。这个相关的问题更详细地解释了两者之间的区别。
[
[[
sh
符号 (( ... ))引入了算术上下文。同样,这不是原始 Bourne shell 的一部分(它有一个专用的外部工具 expr来处理这些事情) ,但是现代的 shell 已经内置了这个。如果算术计算的结果不是0(或者是一个错误) ,则算术表达式的结果代码为0。
(( ... ))
expr
表示法 ( command )创建一个子 shell 并在其中计算 command。在某些情况下,这实际上是必要的和有用的,但是如果您只是在学习语法,那么您不太可能需要它。
( command )
command
事实上,在我看到的大多数脚本中,这个用在条件句中,显然是没有必要的。
另一个需要注意的反模式是
command if [ $? = 0 ]; then : things fi
您几乎不需要显式地检查 $?,特别是,将它与零进行比较是 if和 while 特别是在幕后为您做的事情。这应该被重构为
$?
while
if command; then : ...