shell--3.运算符
1.注意
原生bash不支持简单的数学运算,但是可以用其它命令来实现如 awk 和expr ,expr最常用
val=`expr 2 + 3`
echo "结果 ${val}" #打印5
(1)表达式和运算符之间要有空格,如2+2是不对的,要写成 2 + 2
(2)完整的表达式要被` ` 包含,这不是单引号,是反引号在Esc 键下面
2.算术运算符
#!/bin/bash a=20 b=3 echo "a+b结果: `expr $a + $b`" echo "a-b结果: `expr $a - $b`" echo "a*b结果: `expr $a \* $b`" echo "a/b结果: `expr $a / $b`" echo "a对b取余: `expr $a % $b`" a=30 echo "a重新赋值为 ${a}" if [ $a == $b ] then echo "a等于b" fi if [ $a != $b ] then echo "a不等于b" fi
#注意,if和后面的[] 之间要有空格,[] 和里面的$a之间要有空格,==与$a和$b之间要有空格
乘法之前要有反斜杠
3.关系运算符
(1) 关系运算符只支持数字,不支持字符串,除非字符串的值也是数字
a. -eq,判断两个数是否相等,相等返回true
b=30 if [ $a -eq $b ] then echo "a等于b" else echo "a不等于b" fi
b. -ne,判断两个数是否相等,不相等返回true
if [ $a -ne $b ] then echo "-ne a不等于b" else echo "-ne a等于b" fi
c. -gt, 检测左边的数是否大于右边的,如果是返回true
if [ $a -gt $b ] then echo "-gt a大于b" else echo "-gt a小于b" fi
d. -lt , 检测左边的数是否小于右边的,如果是返回true
if [ $a -lt $b ] then echo "-lt a小于b" else echo "-lt a大于b" fi
e. -ge , 检测左边的数是否大于等于右边的数
if [ $a -ge $b ] then echo "-ge a大于等于b" else echo "-ge a小于等于b" fi
f. -le , 检测左边的数是否小于等于右边的数
if [ $a -le $b ] then echo "-le a小于等于b" else echo "-le a大于等于b" fi
4. 布尔运算符
a. !,非运算,表达式返回true,则返回false
if [ $c != $d ] then echo "c!=d : c不等于d" else echo "c!=d : c等于d" fi
b. -o,或运算,有一个返回true,则返回true
d=10 if [ $c -gt $d -o $c -eq $d ] then echo "-o c大于或等于d" else echo "-o c小于d" fi
c. -a,与运算,两个都返回true,才返回true
if [ $c -gt $d -a $c -ne $d ] then echo "-a c大于d" else echo "-a c小于或等于d" fi
5. 逻辑运算符
a. &&,逻辑的and
c=10 d=20 if [[ $c -lt 100 && $d -gt 100 ]] then echo "&& 返回true" else echo "&& 返回false" fi
b. ||,逻辑的或
if [[ $c -lt 100 || $d -lt 100 ]] then echo "|| 返回true" else echo "|| 返回false" fi
6. 字符串运算符
a. =,检测两个字符串是否相等,相等返回true
m="abc" n="def" k="" ###等于 if [ $m = $n ] then echo "= m等于n " else echo "= m不等于n " fi
b. !=,检测两个字符串是否不相等,不相等返回true
if [ $m != $n ] then echo "!= m不等于n" else echo "!= m等于n" fi
c. -z , 检测字符串长度是否为0,为0返回true
if [ -z $m ] then echo "-z m长度是0" else echo "-z m长度不是0" fi if [ -z $k ] then echo "k长度是0" fi
d. -n , 检测字符串长度是否为0,不为0返回true
if [ -n $m ] then echo "-n m长度不为0" else echo "-n m长度是0" fi
e. str , 检测字符串是否为空,不为空返回true
k=" " echo "k的长度" ${#k} if [ $k ] then echo "k不为空" else echo "k为空" fi 打印k的长度是3,k为空
7. 文件运算符
a. -b , 是否是块设备
file_temp="/opt/shell_test/test.sh"
if [ -b $file_temp ]
then
echo "${file_temp} 是块设备"
else
echo "${file_temp} 不是块设备"
fi
b. -e ,文件是否存在
c. -d , 文件是否是目录
d. -s ,文件是否为空
e. -r ,文件是否可读
f. -w , 文件是否可写
g. -x , 文件是否可执行
file_temp="/opt/shell_test/arry.sh" #-b 文件是否是块设备 if [ -b $file_temp ] then echo "${file_temp} 是块设备" else echo "${file_temp} 不是块设备" fi #文件是否存在 if [ -e $file_temp ] then echo "-e 文件存在" else echo "-e 文件不存在" fi #是否是目录 if [ -d $file_temp ] then echo "-d 文件是目录" else echo "-d 文件不是目录" fi #是否为空 if [ -s $file_temp ] then echo "-s 文件为空" else echo "-s 文件不为空" fi #是否可读 if [ -r $file_temp ] then echo "-r 文件可读" else echo "-r 文件不可读" fi #是否可写 if [ -w $file_temp ] then echo "-w 文件可写" else echo "-w 文件不可写" fi #是否可执行 if [ -x $file_temp ] then echo "-x 文件可执行" else echo "-x 文件不可执行" fi