Shell入门:Shell运算符,入门shell运算符
Shell入门:Shell运算符,入门shell运算符
Shell入门(二)之Shell运算符
Shell基本运算符
Shell和其他编程语言一样,支持多种运算符,包括:
算术运算符
关系运算符
布尔运算符
字符串运算符
原生的bash不支持简单的数学运算,但是可以通过其他命令来实现,例如:awk和expr,expr最为常用。
如:
val=`expr 2 + 3` echo $val
输出:5
注意,2 + 3之间需要有一个空格
算术运算符
a变量为10,b变量为20。
运算符 | 说明 | 举例 |
---|---|---|
+ | 加号 | `expr $a + $b`,结果:30 |
- | 减号 | `expr $a - $b`,结果:-10 |
* | 乘号 | `expr $a * $b`,结果:200 |
/ | 除号 | `expr $b / $a`,结果:2 |
% | 取余 | `expr $b % $a`,结果:0 |
= | 赋值 | var=$a,把变量a赋值给var |
== | 等于 | [$a == $b],结果为0 |
!= | 不等于 | [$a != $b],结果为1 |
eg:
[zhang@localhost home]$ a=10 [zhang@localhost home]$ b=20 [zhang@localhost home]$ echo $a + $b = `expr $a + $b` 10 + 20 = 30 [zhang@localhost home]$ echo $a - $b = `expr $a - $b` 10 - 20 = -10 [zhang@localhost home]$ echo $a \* $b = `expr $a \* $b` 10 * 20 = 200 [zhang@localhost home]$ echo $a / $b = `expr $a / $b` 10 / 20 = 0 [zhang@localhost home]$ echo $b / $a = `expr $b / $a` 20 / 10 = 2 [zhang@localhost home]$ echo $b % $a = `expr $b % $a` 20 % 10 = 0 [zhang@localhost home]$ var=$a [zhang@localhost home]$ echo $var 10 [zhang@localhost home]$ echo $[$a == $b] 0 [zhang@localhost home]$ echo $[$a != $b] 1 [zhang@localhost home]$ echo $[$a == 10] 1
注:$[$a == $b]的写法,可以使用$[a == b]替代,如:
[zhang@localhost ~]$ a=10 [zhang@localhost ~]$ b=20 [zhang@localhost ~]$ echo $[a + b] 30 [zhang@localhost ~]$ echo $[a - b] -10 [zhang@localhost ~]$ echo $[a * b] 200 [zhang@localhost ~]$ echo $[a / b] 0 [zhang@localhost ~]$ echo $[a == b] 0 [zhang@localhost ~]$ echo $[a != b] 1 [zhang@localhost ~]$ echo $[a >= b] 0 [zhang@localhost ~]$ echo $[a <= b] 1 [zhang@localhost ~]$ echo $[a % b] 10
关系运算符
运算符 | 说明 | 举例 |
---|---|---|
-eq | 检测2个数是否相等,相等返回true。 | [$a -eq $b]返回false |
-ne | 检测2个数是否不相等,相等返回true。 | [$a -ne $b]返回true |
-gt | 检测左边的数是否大于右边的,如果是,则返回true | [$a -gt $b]返回false |
-lt | 检测左边的数是否小于右边的,如果是,则返回true | [$a -lt $b]返回true |
-ge | 检测左边的数是否大于等于右边的,如果是,则返回true | [$a -ge $b]返回false |
-le | 检测左边的数是否小于等于右边的,如果是,则返回true | [$a -le $b]返回true |
eg:
#!/bin/bash a=10 b=20 if [ $a -eq $b ] then echo "$a -eq $b : a is equal to b" else echo "$a -eq $b: a is not equal to b" fi if [ $a -ne $b ] then echo "$a -ne $b : a is not equal to b" else echo "$a -ne $b : a is equal to b" fi if [ $a -gt $b ] then echo "$a -gt $b : a is greater than b" else echo "$a -gt $b : a is not greater than b" fi if [ $a -lt $b ] then echo "$a -lt $b : a is less than b" else echo "$a -lt $b : a is not less than b" fi if [ $a -ge $b ] then echo "$a -ge $b : a is greater or equal to b" else echo "$a -ge $b : a is not greater or equal to b" fi if [ $a -le $b ] then echo "$a -le $b : a is less or equal to b" else echo "$a -le $b : a is not less or equal to b" fi
输出结果:
10 -eq 20: a is not equal to b 10 -ne 20 : a is not equal to b 10 -gt 20 : a is not greater than b 10 -lt 20 : a is less than b 10 -ge 20 : a is not greater or equal to b 10 -le 20 : a is less or equal to b
布尔运算符
运算符 | 说明 | 举例 |
---|---|---|
! | 非运算,表达式为true,则返回false,否则返回true | [!false]返回true |
-o | 或运算,有一个表达式为true,则返回true | [ $a -lt 20 -o $b -gt 100],返回true |
-a | 与运算,2个表达式都为true,才返回true | [$a -lt 20 -a $b -gt 100],返回false |
eg:
#!/bin/bash a=10 b=20 if [ $a != $b ] then echo "$a != $b" else echo "$a == $b" fi if [ $a -lt 20 -o $b -gt 100 ] then echo "$a less than 20 or $b greater than 100 : return true" else echo "$a less than 20 or $b greater than 100 : return false" fi if [ $a -lt 20 -a $b -gt 100 ] then echo "$a less than 20 and greater than 100 : return true" else echo "$a less than 20 and greater than 100 : return false" fi
输出结果:
10 != 20 10 less than 20 or 20 greater than 100 : return true 10 less than 20 and greater than 100 : return false
逻辑运算符
运算符 | 说明 | 举例 |
---|---|---|
&& | 逻辑的and | [[ $a -lt 100 && $b -gt 100 ]] 返回 false |
|| | 逻辑的 OR | [[ $a -lt 100 || $b -gt 100 ]] 返回 true |
eg:
#!/bin/bash a=10 b=20 if [[ $a -lt 100 && $b -gt 100 ]] then echo "return true" else echo "return false" fi if [[ $a -lt 100 || $b -gt 100 ]] then echo "return true" else echo "return false" fi
输出结果:
return false return true
字符串运算符
a变量为”abc”,b变量为”efg”。
运算符 | 说明 | 举例 |
---|---|---|
= | 检测两个字符串是否相等,相等返回true | [ $a = $b ],返回false |
!= | 检测两个字符串是否相等,不相等返回true | [ $a != $b ],返回true |
-z | 检测字符串长度是否为0,不为0返回true | [ -z $a ]返回false |
-n | 检测字符串长度是否为0,不为0返回true | [ -n $a ]返回true |
str | 检测字符串是否为空,不为空返回true | [$a]返回true |
eg:
#!/bin/bash a="abc" b="efg" if [ $a = $b ] then echo "$a equal $b" else echo "$a not equal $b" fi if [ $a != $b ] then echo "$a != $b" else echo "$a == $b" fi if [ -n $b ] then echo "$b length ${#b}" else echo "$b length 0" fi # eg: str if [ $a ] then echo "$a not null" else echo "$a is null" fi
结果:
abc not equal efg abc != efg abc length 3 efg length 3 abc not null
评论暂时关闭