一、实现算术运算
1.let var=算术表达式
2.((var=算术表达式))
3.var=$[算术表达式]
4.var=$((算术表达式))
.................................
乘法符号有些场景中需要转义
内建的随机数生成器变量:
$RANDOM 取值范围:0-32767
示例:生成 0-49之间的随机数
echo $[$RANDOM%50]]
增强型赋值:
i+=10 相当于 i=i+10
i-=j 相当于 i=i-j
i++,++i 相当于i=i+1
i--,--i 相当于i=i-1
二、逻辑运算
1,真
0,假
注意:以上的1和0均是二进制
与:&:和0相与结果为0,和1相与结果保留原值,一假则假,全真则真
0与0=0
0与1=0
1与0=0
1与1=1
或:|:和1相或结果为1,和0相或结果保留原值,一真则真,全假则假
0或1=1
0或0=0
1或0=1
1或1=1
非:!
!1=0 !true
!0=1 !false
异或:^:异或的两个值,相同为假,不同为真。两个数字x,y异或得到结果z,z再和任意两者之一x异或,将得出另一个值y
0^0=0
0^1=1
1^0=1
1^1=0
短路运算
短路 与&&
CMD1 短路与 CMD2
若第一个CMD1结果为真 (1);则第二个CMD2必须参与运算,才能得到最终的结果
若第一个CMD1结果为假 (0);则总的结果为0,因此不需要执行CMD2
短路 或||
CMD1 短路或 CMD2
第一个CMD1结果为真 (1);则总的结果必定为1,因此不需要执行CMD2
第一个CMD1结果为假 (0);第二个CMD2必须参与运算,才能得到最终的结果
三、条件测试
条件测试:判断某需求是否满足,需要由测试机制来实现,专用的测试表达式需要由测试命令辅助完成测试过程,实现评估布尔声明,以便在条件环境下进行执行
若真,则状态码变量$?返回0
若假,则状态码变量$?返回1
3.1条件测试命令:
[ ]
[[ ]] 相当于增强版的[ ],支持[ ]的用法且支持扩展正则表达式和通配符
注意:[ CMD ]命令的前后必须留有一个空格
3.2数值测试
-eq 等于
-ne 不等于
-gt 大于
-lt 小于
-ge 大于等于
-le 小于等于
3.3算术表达式:
== 相等
!= 不相等
<=
>=
<
>
3.4文件测试:
-e file :文件存在性测试
-s file:是否存在且非空
-N file:文件从上一次被读取之后是否被修改过
-O file :当前有效用户是否为文件属主
-G file:当前有效用户是否为文件属组
3.5组合测试条件
3.5.1:第一种方法
[ CMD1 -a CMD2 ] 并且 ,CMD1和CMD2都是真,结果才为真
[ CMD1 -o CMD2] 或者,CMD1或CMD2只要有一个为真,结果就为真
[ ! CMD ] 取反
注意:-a 和 -o 需要使用测试命令进行,[[ ]]不支持
3.5.2:第二种方法
CMD1&&CMD2 并且,短路与,代表条件性的AND
(如果CMD1成功,将执行CMD2,否则将不执行CMD2)
CMD1||CMD2 或者,短路或,代表性条件or
(如果CMD1成功将不执行CMD2,否则执行CMD2)
!CMD 非,取反
四、关于()和{ }
(CMD1;CMD2.....)和{ CMD1;CMD2........}都可以将多个命令组合起来,批量执行
注意:( list )会开启子shell进程,并且list中变量赋值及内部命令执行后,将不在影响后 续的环境
{ list;}不会开启shell子进程,在当前shell中运行,会影响当前shell的环境