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 文件可读 文件可写 文件不可执行 文件为普通文件 文件不是个目录 文件不为空 文件存在 (编辑:汽车网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |