1.if 结构
本章介绍 Bash 脚本的条件判断语法。
if
是最常用的条件判断结构,只有符合给定条件时,才会执行指定的命令,它的语法如下:
if commands; then
commands
[elif commands; then
commands...]
[else
commands]
fi
这个命令分成三个部分:if
、elif
和else
。其中,后两个部分是可选的,fi
关键字作为结束。
if
关键字后面是主要的判断条件,elif
用来添加在主条件不成立时的其他判断条件,else
则是所有条件都不成立时要执行的部分。
if test $USER = "foo"; then
echo "Hello foo."
else
echo "You are not foo."
fi
上面的例子中,判断条件是环境变量$USER
是否等于foo
,如果等于就输出Hello foo.
,否则输出其他内容。
if
和then
写在同一行时,需要分号分隔。分号是 Bash 的命令分隔符。它们也可以写成两行,这时不需要分号。
if true
then
echo 'hello world'
fi
if false
then
echo 'it is false' # 本行不会执行
fi
上面的例子中,true
和false
是两个特殊命令,前者代表操作成功,后者代表操作失败。if true
意味着命令部分总是会执行,if false
意味着命令部分永远不会执行。
除了多行的写法,if
结构也可以写成单行。
if true; then echo 'hello world'; fi
if false; then echo "It's true."; fi
注意,if
关键字后面也可以是一条命令,该条命令执行成功(返回值0
),就意味着判断条件成立。
if echo 'hi'; then echo 'hello world'; fi
上面命令中,if
后面是一条命令echo 'hi'
。该命令会执行,如果返回值是0
,则执行then
的部分:
if
后面可以跟任意数量的命令。这时,所有命令都会执行,但是判断真伪只看最后一个命令,即使前面所有命令都失败,只要最后一个命令返回0
,就会执行then
的部分。
if false; true; then echo 'hello world'; fi
上面例子中,if
后面有两条命令(false;true;
),第二条命令(true
)决定了then
的部分是否会执行:
elif
部分可以有多个:
#!/bin/bash
echo -n "输入一个1到3之间的数字(包含两端)> "
read character
if [ "$character" = "1" ]; then
echo 1
elif [ "$character" = "2" ]; then
echo 2
elif [ "$character" = "3" ]; then
echo 3
else
echo 输入不符合要求
fi
上面例子中,如果用户输入3
,就会连续判断3次。
2.test 命令
if
结构的判断条件,一般使用test
命令,有三种形式。