Bash 脚本中可以使用 if - else,case 语句 来进行条件判断,对于字符串还支持正则。
if 的结构
1 | if condition; then |
如果 if 和 then 不写在同一行,则不需要加分号:
1 | if condition |
if 后的判断可以有多个,多个使用分号隔开,判断的结果根据最后一个条件决定:
1 | if condition1; condition2; condition3; then |
if 后条件的写法
if 的条件有三种写法:
1 | 写法一 |
方括号 [
是 test 的简写形式,因此,方括号中的内容与 [
之间需要有一个空格。
例如判断一个文件是否存在且是一个普通文件:
1 | if test -f /path/to/file ; then |
if 后面可以使用任意命令作为条件,如果命令返回 0 ,则条件成立,否则不成立。
字符串比较
字符常见的比较方式:
[ str ]
:如果字符不为空,则为 true[ -n str ]
:字符串不为空,则为 true[ -z str ]
:字符串为空,则为 true[ str1 = str2 ]
等价于[ str1 == str2 ]
:字符串相等[ str1 != str2 ]
:字符串不相等[ str1 '>' str2]
,[ str1 '<' str2 ]
:字典顺序比较字符串,注意>
、<
要加引号,否则会被 shell 解释为重定向符
例如:
1 | str='abc' |
注意进行字符串判断时,最好将变量放入引号 ""
中,防止变量为空。例如当 str 为空时,判断就会变为 [ -n ]
,此时结果为 true,不符合预期。
整数判断
判断的方式:
[ num1 -eq num2 ]
:等于 equal[ num1 -ne num2 ]
:不等于 not equal[ num1 -lt num2 ]
:小于 little than[ num1 -le num2 ]
:小于等于 little or equal[ num1 -gt num2 ]
:大于 great than[ num1 -ge num2 ]
:大于等于 great or equal
正则判断
正则需要在 [[ ... ]]
中使用 =~
符号进行判断:
1 | [[ str =~ regex ]] |
例如:
1 | num=5 |
逻辑运算
可以使用逻辑运算 &&
、||
、!
将 test 表达式联结起来:
&&
或者-a
: 逻辑 与||
或者-o
:逻辑 或!
:逻辑 非
例如:
1 | if [[ $a -eq $b && $a -gt 0 ]] ; then |
与命令一起使用时,也可以使用算术运算符:
1 | if [ $a -lt $b ] && cd /home/$username ; then |
算术判断
可以使用 ((...))
进行算术判断:
1 | if ((3 > 2)); then |
注意,((...))
运算的结果如果非零,则视为 true,与命令返回值判断相反。
1 | ((0)) false |
case 语句结构
case 语句的结构:
1 | case expression in |
expression 可以是一个表达式或者变量, pattern 则是匹配的模式,可以使用通配符:
1 | a) # 匹配 a |
Bash 4.0 之后,可以匹配多个,区别是,结尾使用 ;;&
:
1 | case $a in |