shell编程 - 运算符

406 阅读1分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第31天,点击查看活动详

算数运算符

+ - * / %
加减乘除 取余
​
以下四种都可以进行运算操作,但是都不能进行浮点数运算
$[]
$[1+2]  $[$a+3]
​
$(())  # 和$[]使用方式一样expr  # 注意运算符两侧一定要有空格,没有空格就不会进行运算
expr $q + 1
expr 3 * 10  # 乘法,*有特殊意义,因此需要\进行转义let
$age=18
age=$[$age+1]
# 上述两行代码等价于下述操作
let age=age+1  # 也可以写成age+=1let i++  # 如果i不存在,i会变成1,如果存在就是i的值自增1
let ++i  # 和i++效果相同# ++在前和在后的区别
let x=m++  # x=0  m=, 首先将m的值赋值给x,然后m进行加1操作
let y=++n  # y=1 n=1

测试运算符

测试命令:test

测试符号:[],注意两侧必须有空格

test命令和中括号的效果一致,参数也是一致的

文件测试

-d 目录
test -d /etc ; echo $?  # 测试是否是目录或者是否存在
[ -d /etc ] ; echo $?
​
-s 文件长度大于0
[ -s /etc/passwd ] ; echo $?
​
-f 标准文件
[ -f /etc/passwd ]
-w 当前用户对文件是否有写权限
-r 当前用户对文件是否有读权限
-x 当前用户对文件是否有执行权限
​
-L 判断是否是软连接或者硬链接文件 

字符串测试

-n 测试字符串的长度是否为0
[ -n $变量名]
x=""
[ -n "${x}" ] ; echo $?  # 注意一定要上引号
​
= 判断两个字符串是否相等
!= 判断两个字符串是否不相等
[root@VM-4-2-centos ~]# x="abc"
[root@VM-4-2-centos ~]# y="bcd"
[root@VM-4-2-centos ~]# [ "${x}" = "${y}" ]; echo $?
1
[root@VM-4-2-centos ~]# [ "${x}" != "${y}" ]; echo $?
0

数值测试

-eq 判断数值是否相等
[ 10 -eq 10 ]; echo $?
​
-gt 判断大于
-lt 判断小于
-ge 判断大于等于
-le 判断小于等于
-ne 判断不等于

其他测试

-a 表示and
[ 10 -eq 10 -a 11 -lt 9] 等价于 [ 10 -eq 10 ] && [ 11 -lt 9 ]
-o 表示或者,等价于连接命令的 || ,前一个命令失败才执行后面的命令

关系运算符

如果想使用< > >= <= == !=这样的关系运算符,就不能使用[]test测试符,使用(())即可。但是当有多个条件时只能使用&& ||

[root@VM-4-2-centos ~]# (( 10 == 11 ));echo $?
1[root@VM-4-2-centos ~]# (( 10 == 1 )) || (( 1 == 1 )); echo $?
0

赋值运算符

除了赋值符号意外,其他的赋值运算符也需要在(())中编写

=:赋值
a=18
​
+=
((age+=10))
​
-=
*=
/=
%=