bash支持很多运算符,包括算数运算符、关系运算符、布尔运算符、字符串运算符和文件测试运算符。
1、表达式
bash的表达式可以分为算术表达式和逻辑表达式两种类型。
1、算术表达式
数学运算涉及到表达式求值。bash自身并不支持简单的数学运算,但是可以awk和expr等命令来实现数学运算,其中expr最为常用,使用它能够完成表达式的求值操作。示例,将两个数相加,同时将运算结果表达出来
expr 5 + 3
注意:操作数和运算符之间一定要有空格,否则expr会简单的将其当作字符串输出。
当然,可以将计算的值用作变量,也可以将expr计算的结果赋值给变量。
n=1m=5expr $n + $mval=`expr 2 + 2`echo $val
注意,完整的表达式要用反引号"`"括起来。
更为简单的方式是使用$[]表达式进行数学计算,例如
val=$[5+3]echo $val
这种形式不要求运算符和操作数之间有空格。
还可以用let命令来计算整数表达式的值,如
n=1m=5let val=$n+$mecho $val
2、逻辑表达式
逻辑表达式主要用于条件判断,值为true(或为0)表示结果为真,值为false表示结果为假。
通常使用test命令来判断表达式的真假。语法格式如下:
test 逻辑表达式
例如以下语句用于比较两个字符串是否相等。
test "abc"="xyz"
test命令更常用方括号"[]"代替。语法格式如下
[ 逻辑表达式 ]
在使用左方括号而非test时,其后必须始终跟着一个空格、要评估的逻辑表达式、一个空格和右方括号,右方括号表示所需评估表达式的结束。逻辑表达式两边的空格是必需的,这表示调用test,以区别于同样经常使用方括号的字符、模式匹配操作。
逻辑表达式判断表达式的结果,然后返回真假,通常和if、while或until命令结合使用,用于条件判断,以便对程序流进行广泛的控制。
2、算术运算符
算术运算符用于数值计算,主要的算术运算符列表如下:
+:加法-:减法*:乘法/:除法%;取余值=:赋值
这里给出一个使用算术运算符的例子
#!/bin/basha=1b=2val=`expr $a + $b`echo "a + b : $val"#乘法(*)前面必须加转义符号反斜杠(\)才能实现乘法操作val=`expr $a \* $b`echo "a*b:$val"
3、整数关系运算符
Shell支持整数比较,还需要使用整数关系运算符,列表如下:
-eq:相等,检测两个数是否相等,相等返回true-ne:不等于。检测两个数是否相等,不相等返回true-gt:大于。检测左边的数是否大于右边的,如果是,返回true-lt:小于。检测左边的数是否小于右边的,如果是,返回true-ge:大于等于-le:小于等于
下面是一个关系运算符的例子
#!/bin/basha=10b=20if [ $a -eq $b ]then echo "$a -eq $b :a等于b"else echo "$a -eq $b:a不等于b"fi
4、字符串检测运算符
字符串运算符用于检测字符串,列表如下:
=:检测两个字符串是否相等,相等返回true。!=:检测两个字符串是否相等,不相等返回true。-z:检测字符串长度是否为0,为0返回true。-n:检测字符串长度是否为0,不为0返回true。str:检测字符串是否为空,不为空返回true。
下面给出一个例子
#!/bin/basha="abc"b="xyz"if [ $a = $b ]then echo "$a = $b :a等于b"else echo "$a = $b :a不等于b"fi if [ -z $a ]then echo "-z $a :字符串长度为0 "else echo "-z $a 字符串长度不为0 "fi if [ $a ]then echo "$a :字符串为非空"else echo "$a :字符串为空"fi
5、文件测试运算符
文件测试运算符用于检测文件的各种属性,以文件名为参数
-b:检测文件是不是块设备文件,如果是,则返回true。-c:检测文件是不是字符设备文件,如果是,则返回true。-d :检测文件是不是目录,如果是,则返回true。-f:检测文件是不是普通文件,如果是,则返回true。-g:检测文件是否设置了SGID位,如果是,则返回ture。-k:检测文件是否设置了粘着位,如果是,则返回true。-p:检测文件是不是具名管道,如果是,则返回,true。-u:检测文件是是否设置了SUID位,如果是,则返回ture。-r:检测文件是否刻度,如果是,则返回true。-w:检测文件是否可写,如果是,则返回true。-x :检测文件是否可执行,如果是,则返回true。-s:检测文件是否为空,不为空则返回true。-e:检测文件是否存在,如果是,则返回true。
例如,下面的代码将检测/bin/bash的读写属性
#!/bin/bashfile="/bin/bash"if [ -r $file ]then echo "文件具备读取权限"else echo "文件不具备读取权限"fiif [ -w $file ] then echo "文件具备写入权限"else echo "文件不具备写入权限"fi
6、布尔运算符
布尔运算符用于对一个或多个逻辑表达式执行逻辑运算,结果为true或为false。通常用来对多个条件进行判断。有与、或、非3个运算符。
-a:与运算。两个条件都为true才返回true。
-o:或运算。有一个表达式为true就返回true。
!:非运算。表达式为true,则返回false,否则返回true。
这里给出一个示例:
#!/bin/basha=5b=10if [ $a -lt 10 -a $b -gt 15 ] then echo "两个条件都满足"else echo "两个条件都不满足"fi