有一类命令会根据条件使脚本跳过某些命令。这样的命令通常称为结构化命令(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