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

相关内容