继续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:文件或目录是否存在