Bash的条件控制允许两种类型:1)命令的成功或失败 2)逻辑表达式的真假
这两种类型都可以通过退出状态($?)来检验,$?=0为真,否则为假
一、命令的成功或失败
通过查看$?值
$echo $?
二、逻辑表达式求值
可以用test命令,[ ]、 [ [ ] ]
[ ]是test命令的变形
test命令和[ ]不能使用正则表达式,[ [ ] ] 可以使用正则表达式
1、字符串判断
$name=Tom
$friend=Jose
$test name != Tom
$echo $?
1
$[ $name = Tom ]
$echo $?
0
$[ $name == Tom -a "$friend" == "Jose" ]
$echo $?
1
$[ [ $name == [Tt]om ] ]
$echo $?
0
$[ [ $name == [Tt]om && $friend == "Jose" ] ]
$echo $?
0
if [ "$name" = "" ]
then
fi
注意:
1)第一个括号 [ 后面必须有空格,第二个括号 ] 前必须有空格,=、!=、==两边必须有空格
2)字符串比较时,可以使用一个或两个等号,因此,=也可换成==
3)[ ]中逻辑操作用-a,-o; [ [ ] ] 中逻辑操作用&&,||
4)和空字符串比较,注意变量也要加上双引号;如果不是和空字符串比较,则变量不用加双引号
2、整数判断
用test, [ ], [ [ ] ]
还可以用(( )),更方便,可以直接用比较运算符,变量前不用加$
$x=5
$y=20
$test $x -gt $y
$echo $?
1
$[ $x -gt $y ]
$echo $?
1
$[ [ $x -gt $y ] ]
$echo $?
1
$((x>y))
$echo $?
1
$((x>5 && y==20))
$echo $?
1
三、小结
1、字符串和整数:test、[ ]、[ [ ] ] 既可以用于字符串的比较,也能用于整数的比较;而(( ))仅能用于整数的比较
2、正则表达式:test、[ ]不能使用正则表达式; [ [ ] ]可以使用正则表达式
3、逻辑操作符:test、[ ]使用-a, -o逻辑操作符;[ [ ] ] 、(( ))使用&&、||逻辑操作符
4、空格:test、[ ]、[ [ ] ] 中比较操作符前后、[和以及]和之前必须有空格;(( ))没有要求
5、建议:字符串比较用[ [ ] ] 、整数比较用(( ))
=-=-=-=-=
Powered by Blogilo