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循环格式;


运算符 说明
++ 自增运算
-- 自建运算
! 逻辑求反
~ 位求反
** 幂运算
<< 左位移
>> 右位移
& 位布尔和
| 位布尔或
&& 与运算
|| 或运算
posted @ 2022-02-08 15:58  爱和可乐的w  阅读(33)  评论(0编辑  收藏  举报