Shell脚本学习 - 运算符

时间:2021-07-30 16:49:13

继续shell脚本学习。上一篇是基本数据类型和语法的总结,这一篇是运算相关的操作。

运算符

bash不支持简单的数学计算,需要依赖其他命令实现。

expr可以代为实现。

# 表达式一般这么写
`expr + `

注意点:

1. 引号不是普通单引号,是右斜的引号,在esc键下方。表达式用这种右斜的引号括起来,必须成对出现

2. 运算符两边要留空格。4+4不行,必须写成4 + 4

运算符不用多说,和其余编程语言类似。加减乘除取余:+-*/%

赋值用=,比较相等用==,比较不等用!=

特别注意的是*要在前面加反斜杠,写成\*

还有就是看到教程中有特别指出的一点:

在 MAC 中 shell 的 expr 语法是:$((表达式)),此处表达式中的 "*" 不需要转义符号 "\"

关系运算符

关系运算符只支持数字,或者值为纯数字的字符串

相等:-eq

不等:-ne

大于:-gt

小于:-lt

大于等于:-ge

小于等于:-le

布尔运算符

非:!

或:-o

与:-a

逻辑运算符

逻辑与:&&

逻辑或:||

字符串运算符

比较两个字符串是否相等:=

比较不等:!=

判断字符串长度是否为0:-z  [-z $a]

判断字符串长度是否非0:-n  [-n "&a"]

判断字符串是否为空:[$a]

文件测试运算符

用于检测Unix文件的各种属性

-b file:是否为块设备文件

-c file:是否为字符设备文件

-d file:是否为目录

-f file:是否是普通文件

-g file:是否设置了SGID位

SGID的解释:

SGID是获得该程序所属用户组的权限。SGID主要用在目录上

-k file:是否设置了粘着位(Sticky Bit)

SBIT的解释:

若没有粘滞位,则普通用户可以对目录下的文件/子目录进行删除操作(因为普通用户对目录具有w权限),包括其它用户建立的目录/文件;但若赋了SBIT,则普通用户只能删除自己创建的文件/目录,而不能删除不属于自己的文件/目录!

-p file:是否为有名管道

-u file:是否设置了SUID位

SUID的解释:

让本来没有相应权限的用户运行这个程序时,可以访问他没有权限访问的资源

-r file:是否可读

-w file:是否可写

-x file:是否可执行

-s file:是否文件为空

-e file:文件或目录是否存在