有一类命令会根据条件使脚本跳过某些命令。这样的命令通常称为结构化命令(structured command)。

if command then
commands
fi

bash shell的if语句会运行if后面的那个命令。如果该命令的退出状态码0 (该命令成功运行),位于then部分的命令就会被执行。如果该命令的退出状态码是其他值,then部分的命令就不会被执行,bash shell会继续执行脚本中的下一个命令

if command; then commands
fi

通过把分号放在待求值的命令尾部,就可以将then语句放在同一行上了,这样看起来更 像其他编程语言中的if-then语句。

if grep $testuser /etc/passwd then
   echo "The bash files for user $testuser are:"
   ls -a /home/$testuser/.b*
   echo
else
   echo "The user $testuser does not exist on this system."
   echo
fi
if command1 
then
	commands 
elif command2 
then
	more commands 
fi

if-then语句是否能测试 命令退出状态码之外的条件。 答案是不能。但在bash shell中有个好用的工具可以帮你通过if-then语句测试其他条件。

if test $my_variable
then
   echo "The $my_variable expression returns a True"
#
else
   echo "The $my_variable expression returns a False"
fi

bash shell提供了另一种条件测试方法,无需在if-then语句中声明test命令。

if [ condition ] 
then
commands
fi

方括号定义了测试条件。注意,第一个方括号之后和第二个方括号之前必须加上一个空格, 否则就会报错


test命令的数值比较功能:

字符串比较测试:

test命令的文件比较功能:


存在复合命令:

if [ -d $HOME ] && [ -w $HOME/testing ]

双括号命令允许你在比较过程中使用高级数学表达式

if (( $val1 ** 2 > 90 )) 
then
       (( val2 = $val1 ** 2 ))
       echo "The square of $val1 is $val2"
fi