Shell 运算符分类
发布时间:2023-06-08 13:55:19 所属栏目:教程 来源:
导读:我们知道了 shell 中运算符是什么及其功能,接下来让我们看一下 Shell 脚本运算符的分类及每种运算符的基本操作。
1.1 算术运算符
算术运算符顾名思义,其就是进行加减乘除数值运算,在 shell 中,bash 不支持原
1.1 算术运算符
算术运算符顾名思义,其就是进行加减乘除数值运算,在 shell 中,bash 不支持原
|
我们知道了 shell 中运算符是什么及其功能,接下来让我们看一下 Shell 脚本运算符的分类及每种运算符的基本操作。 1.1 算术运算符 算术运算符顾名思义,其就是进行加减乘除数值运算,在 shell 中,bash 不支持原生的数学运算,需要利用第三方工具来如 let,expr 等来实现。 运算符 说明 举例 + 加法 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.1.1 let 可以利用 let 对数值进行运算,let C=$A+$B, 例如: [root@master ~]# A=1[root@master ~]# B=2[root@master ~]# let C=${A}+${B}[root@master ~]# echo $C 注意:let 运算后需要将其赋值给一个变量。 1.1.2 expr 可以利用 expr 对数组进行运算,C=$(expr $A+$B),例如: [root@master ~]# C=`expr $A + $B`[root@master ~]# echo $C 注意 + 号两边需要有空格,不然会将其当作字符串连接 1.1.3 [] 可以利用 [] 来对数值进行运算,C=[A+B],例如: [root@master ~]# C=$[$A+$B][root@master ~]# echo $C 1.1.4 (()) 利用 (()) 来对数值进行运算,C=$(($A+$B)),例如: [root@master ~]# C=$(($A+$B))[root@master ~]# echo $C 1.2 关系运算符 了解了算术运算,接下来让我们学习关系运算。 比较符 描述 示例 -eq,equal 等于 [1 -eq 1] 为 true -ne,not equal 不等于 [1 -ne 1] 为 false -gt,greater than 大于 [2 -gt 1] 为 true -lt,lesser than 小于 [2 -lt 1] 为 false -ge,greater or equal 大于或等于 [2 -ge 1] 为 true -le,lesser or equal 小于或等于 [2 -le 1] 为 false 关系运算顾名思义就是比较数字的大小,注意关系运算符作用的为数字,不能用其来比较字符串。 #!/bin/bashnum1=num2=echo num1 为:${num1}echo num2 为:${num2}if [ $num1 -eq $num2 ]then echo $num1 -eq $num2 : num1 等于 num2else echo $num1 -eq $num2: num1 不等于 num2fiif [ $num1 -ne $num2 ]then echo $num1 -ne $num2: num1 不等于 num2else echo $num1 -ne $num2 : num1 等于 num2fiif [ $num1 -gt $num2 ]then echo $num1 -gt $num2: num1 大于 num2else echo $num1 -gt $num2: num1 不大于 num2fiif [ $num1 -lt $num2 ]then echo $num1 -lt $num2: num1 小于 num2else echo $num1 -lt $num2: num1 不小于 num2fiif [ $num1 -ge $num2 ]then echo $num1 -ge $num2: num1 大于或等于 num2else echo $num1 -ge $num2: num1 小于 num2fiif [ $num1 -le $num2 ]then echo $num1 -le $num2: num1 小于或等于 num2else echo $num1 -le $num2: num1 大于 num2fi 运行结果为: num1 为: num2 为: -eq : num1 不等于 num2 -ne : num1 不等于 num2 -gt : num1 不大于 num2 -lt : num1 小于 num2 -ge : num1 小于 num2 -le : num1 小于或等于 num2 1.3 布尔运算符 布尔运算符也就是我们常说的与或非 运算符 说明 举例 -a 与运算,两个表达式都为 true 才返回 true。 [1 -lt 2 -a 10 -gt 2] 返回 true。 -o 或运算,有一个表达式为 true 则返回 true。 [1 -lt 2 -o 2 -gt 10] 返回 true。 ! 非运算,表达式为 true 则返回 false,否则返回 true。 [! false] 返回 true。 例如: #!/bin/bashnum1=num2=echo num1 为: ${num1}echo num2 为: ${num2}if [ $num1 -lt - $num2 -gt ];then echo $num1 小于 40 且 $num2 大于 15 : 返回 trueelse echo $num1 小于 40 且 $num2 大于 15 : 返回 fnum1lsefi echo 或运算if [ $num1 -lt -o $num2 -gt ];then echo $num1 小于 40 或 $num2 大于 40 : 返回 trueelse echo $num1 小于 40 或 $num2 大于 40 : 返回 fnum1lsefi echo 非运算if [ $num1 != $num2 ];then echo $num1 != $num2 : num1 不等于 num2else echo $num1 != $num2: num1 等于 num2fi 返回结果为: num1 为: num2 为: 小于 且 大于 : 返回 true或运算 小于 或 大于 : 返回 true非运算 != : num1 不等于 num2[root@master scripts]# vim 2.sh [root@master scripts]# bash 2.sh num1 为: num2 为: 小于 且 大于 : 返回 true或运算 小于 或 大于 : 返回 true非运算 != : num1 不等于 num2 1.4 逻辑运算符 逻辑运算符为,以下介绍 Shell 的逻辑运算符,假定变量 A 为 1,变量 b 为 2: 运算符 说明 举例 && 逻辑的 AND [[ $A -lt 10 && $B -gt 100 ]] 返回 false || 逻辑的 OR [[ $A -lt 10 || $B -gt 100 ]] 返回 true 例如: #!/bin/bashnum1=num2=echo num1 为:${num1}echo num2 为:${num2}if [[ $num1 -lt && $num2 -gt ]];then echo 返回 trueelse echo 返回 falsefiif [[ $num1 -lt || $num2 -gt ]];then echo 返回 trueelse echo 返回 falsefi 返回: num1 为: num2 为: 返回 false返回 true 1.5 字符串运算符 对于字符串进行一些判断操作,假定变量 a 为 “linux”,变量 b 为 “shell”: 运算符 说明 举例 = 检测两个字符串是否相等,相等返回 true。 [$a = $b] 返回 false。 != 检测两个字符串是否相等,不相等返回 true。 [$a != $b] 返回 true。 -z 检测字符串长度是否为 0,为 0 返回 true。 [-z $a] 返回 false。 -n 检测字符串长度是否为 0,不为 0 返回 true。 [-n “$a” ] 返回 true。 $ 检测字符串是否为空,不为空返回 true。 [$a] 返回 true。 例如: #!/bin/bashstr1=linuxstr2=shellecho str1 为:${str1}echo str2 为:${str2}if [ $str1 = $str2 ];then echo $str1 = $str2 : str1 等于 str2else echo $str1 = $str2: str1 不等于 str2fiif [ $str1 != $str2 ];then echo $str1 != $str2 : str1 不等于 str2else echo $str1 != $str2: str1 等于 str2fiif [ -z $str1 ];then echo -z $str1 : 字符串长度为 0else echo -z $str1 : 字符串长度不为 0fiif [ -n $str1 ];then echo -n $str1 : 字符串长度不为 0else echo -n $str1 : 字符串长度为 0fiif [ ${str1} ];then echo str1 : 字符串不为空else echo str1 : 字符串为空fi 返回为: str1 为:linux str2 为:shell linux = shell: str1 不等于 str2 linux != shell : str1 不等于 str2-z linux : 字符串长度不为 -n linux : 字符串长度不为 str1 : 字符串不为空 1.6 文件测试运算符 文件测试在我们编写 shell 中与文件操作非常常用,熟练掌握文件操作可以在后续的 shell 编写中得心应手,例如 file 变量为: 操作符 说明 举例 -d file 检测文件是否是目录,如果是,则返回 true。 [-d $file] 返回 false。 -f file 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。 [-f $file] 返回 true。 -c file 检测文件是否是字符设备文件,如果是,则返回 true。 [-c $file] 返回 false。 -b file 检测文件是否是块设备文件,如果是,则返回 true。 [-b $file] 返回 false。 -g file 检测文件是否设置了 sgiD 位,如果是,则返回 true。 [-g $file] 返回 false。 -u file 检测文件是否设置了 SUID 位,如果是,则返回 true。 [-u $file] 返回 false。 -k file 检测文件是否设置了粘着位 (Sticky Bit),如果是,则返回 true。 [-k $file] 返回 false。 -p file 检测文件是否是有名管道,如果是,则返回 true。 [-p $file] 返回 false。 -r file 检测文件是否可读,如果是,则返回 true。 [-r $file] 返回 true。 -w file 检测文件是否可写,如果是,则返回 true。 [-w $file] 返回 true。 -x file 检测文件是否可执行,如果是,则返回 true。 [-x $file] 返回 true。 -s file 检测文件是否为空(文件大小是否大于 0),不为空返回 true。 [-s $file] 返回 true。 -e file 检测文件(包括目录)是否存在,如果是,则返回 true。 [-e $file] 返回 true。 例如: #!/bin/bash TEST_FILE=/etc/fstab echo 检测的文件为:${TEST_FILE} echo 文件信息为:$(ls -l ${TEST_FILE}) if [ -r $TEST_FILE ] then echo 文件可读 else echo 文件不可读 fi if [ -w $TEST_FILE ] then echo 文件可写 else echo 文件不可写 fi if [ -x $TEST_FILE ] then echo 文件可执行 else echo 文件不可执行 fi if [ -f $TEST_FILE ] then echo 文件为普通文件 else echo 文件为特殊文件 fi if [ -d $TEST_FILE ] then echo 文件是个目录 else echo 文件不是个目录 fi if [ -s $TEST_FILE ] then echo 文件不为空 else echo 文件为空 fi if [ -e $TEST_FILE ] then echo 文件存在 else echo 文件不存在 fi 返回为: 检测的文件为:/etc/fstab 文件信息为:-rw-r--r--. 1 root root 500 Jan 17 14:23 /etc/fstab 文件可读 文件可写 文件不可执行 文件为普通文件 文件不是个目录 文件不为空 文件存在 (编辑:汽车网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
