Shell_05_运算符

运算符

运算符分为:算数运算符、关系运算符、逻辑运算符、字符串运算符和文件测试运算符

1)使用运算符时,必须在运算符左右两边添加空格以隔开其他变量

命令运算符

关联系命令执行:两个命令之间存在依赖性(与、或)

命令执行情况
命令1 && 命令2若命令1成功执行,则开始执行命令2
若命令1执行发生错误,则不执行命令2
命令1 || 命令2若命令1成功执行,则不执行命令2
若命令1执行发生错误,则开始执行命令2

1)命令是否执行成功就根据“$?”变量是否为0来判断


如:在/root/test/abc文件夹下创建文件test和test2
在这里插入图片描述

//不论/abc文件夹是否存在,都可以建立

算数运算符

假定有变量a和b,其值分别为10和20

运算符说明举例
+加法`expr $a + $b` 结果为 30。
-减法`expr $a - $b` 结果为 -10。
*乘法`expr $a \* $b` 结果为 200。
/除法`expr $b / $a` 结果为 2。
%取余`expr $b % $a` 结果为 0。
=赋值a=$b 将把变量 b 的值赋给 a
= =用于比较两个数字 相同则返回 true(真)[ $a == $b ] 返回 false(假)
!=用于比较两个数字 不相同则返回 true[ $a != $b ] 返回 true

1)bash本身不支持算数运算,可通过awk、expr和bc来实现

2)通过中括号运算形式:[ $变量1 运算符 $变量2 ]

//若将运算结果赋于其他变量,还需在左中括号前添加$


expr命令:记录表达式计算所得的结果

指令格式:expr 值1 运算符 值2

1)仅能进行整数级别的运算


如:使用expr进行四则运算
在这里插入图片描述

//“*”运算符需通过“\”进行转义

中括号运算符

判断符号:中括号“[ ]”

指令格式:[ 检测表达式 ]

1)[ ]属于运算符,在使用时需在开头和末尾添加空格

2)中括号内的变量,最好使用双引号括起来

3)中括号内的常数,最好使用单/双引号括起来


检测参数含义解析
1.关于文件的类型检测
-e文件路径检测文件(包括目录)是否存在 如果是,则返回 true[ -e $file ] 返回 true
-d 文件路径检测文件是否是目录 如果是,则返回 true[ -d $file ] 返回 false
-f 文件路径检测文件是否是普通文件 如果是,则返回 true[ -f $file ] 返回 true
-s文件路径检测文件是否为空(文件大小) 不为空返回 true[ -s $file ] 返回 true
-p文件路径检测文件是否为管道文件 如果是,则返回 true[ -p $file ] 返回 false
-b 文件路径检测文件是否为块设备文件 如果是,则返回 true[ -b $file ] 返回 false
-c 文件路径检测文件是否为字符设备文件 如果是,则返回 true[ -c $file ] 返回 false
-S 文件路径检测文件是否为Socket文件 如果是,则返回 true[ -c $file ] 返回 false
2.关于文件的权限检测
-r文件路径检测文件是否可读 如果是,则返回 true[ -r $file ] 返回 true
-w文件路径检测文件是否可写 如果是,则返回 true[ -w $file ] 返回 true
-x文件路径检测文件是否可执行 如果是,则返回 true[ -x $file ] 返回 true
-u文件路径检测文件是否设置了 SUID 位 如果是,则返回 true[ -u $file ] 返回 false
-g 文件路径检测文件是否设置了 SGID 位 如果是,则返回 true[ -g $file ] 返回 false
-k文件路径检测文件是否设置了粘着位(Sticky Bit) 如果是,则返回 true[ -k $file ] 返回 false
3.关于文件对比的检测
-nt (new than)检测第一个是否比第二个文件新 如果新,则返回true[ $file1 -nt $file2 ]
-ot (old than)检测第一个是否比第二个文件旧 如果旧,则返回true[ $file1 -ot $file2 ]
-ef检测两个文件是否为同一个文件 如果同一文件,则返回true[ $file1 -ef $file2 ]
4.关于整数的检测
-eq (eaqul)检测两个数是否相等 相等返回 true[ $a -eq $b ] 返回 false。
-ne (not equal)检测两个数是否相等 不相等返回 true[ $a -ne $b ] 返回 true。
-gt (great than)检测左边的数是否大于右边的 如果是,则返回 true[ $a -gt $b ] 返回 false。
-ge检测左边的数是否大于等于右边的 如果是,则返回 true[ $a -ge $b ] 返回 false。
-lt (less than)检测左边的数是否小于右边的 如果是,则返回 true[ $a -lt $b ] 返回 true。
-le检测左边的数是否小于等于右边的 如果是,则返回 true[ $a -le $b ] 返回 true。
5.关于字符串的检测
-z检测字符串长度是否为0 为0返回 true[ -z $c ] 返回 false
-n检测字符串长度是否为0 不为0返回 true[ -n $c ] 返回 true
\>检测左边字符串是否大于右边字符串 大于返回true(根据ASCII)[ $c \> $d ] 返回true
\<检测左边字符串是否小于右边字符串 小于返回true(根据ASCII)[ $c \< $d ] 返回false
= =检测两个字符串是否相等 相等返回 true[ $c = = $d ] 返回 false
6.关于多重条件检测
-a (与运算)两个表达式都为 true 才返回 true[ $a -lt 20 -a $b -gt 100 ] 返回 false
-o (或运算)有一个表达式为 true 则返回 true[ $a -lt 20 -o $b -gt 100 ] 返回 true
! (非运算)表达式为 true 则返回 false[ ! false ] 返回 true

1)假定有变量a和b,其值分别为10和20

2)假定有变量c和d,其值分别为‘abc’和‘efg’

3)其中权限判断为或判断:三个身份中只要一个有,则认为true


test命令:对文件/数据进行指定的检测

指令格式:test 检测表达式

1)使用方法及效果都等同于中括号判断符号


如:对整数比较大小
在这里插入图片描述
//test和中括号并不能直接打印检测结果,需使用“$?”查看

双圆括号运算

双圆括号可在内括号中实现高级数学表达式

1)格式:(( 数学表达式 ))

2)数学表达式可以是任意数学赋值或比较表达式;

3)较多用于for循环,实现类似C语言的for循环格式;


运算符说明
++自增运算
自建运算
!逻辑求反
~位求反
**幂运算
<<左位移
>>右位移
&位布尔和
|位布尔或
&&与运算
||或运算
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值