加入收藏 | 设为首页 | 会员中心 | 我要投稿 汽车网 (https://www.0577qiche.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

Shell 运算符分类

发布时间:2023-06-08 13:55:19 所属栏目:教程 来源:
导读:我们知道了 shell 中运算符是什么及其功能,接下来让我们看一下 Shell 脚本运算符的分类及每种运算符的基本操作。

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
文件可读
文件可写
文件不可执行
文件为普通文件
文件不是个目录
文件不为空
文件存在

(编辑:汽车网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章