Bash的条件表达式求值

 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

command(s)

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

原文地址:https://www.cnblogs.com/pandachen/p/4771133.html