首页
运维教程
Linux基础
系统服务
系统架构
数据库
shell脚本
虚拟化
大数据
DevOps
企业案例
运维开发
python
go语言
运维安全
行业资讯
网络基础
系统安全
运维面试
学习路线
学习方法
面试题库
职场解惑
常用软件
运维软件
办公软件
书籍资源
日知录
招聘信息
读书计划
书单
关于我们
首页 运维教程shell脚本【Linux】shell脚本实战-各类运算符介绍

【Linux】shell脚本实战-各类运算符介绍

前言

上几篇文章我们主要讨论了shell的脚本基础,以及基础的运算符,在这里我们稍微来复习下之前的内容:

一. 复习之前内容

1. 算术运算符

下表列出了常用的算术运算符,假定变量 a=10,变量 b=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。

注意:条件表达式要放在方括号之间,并且要有空格,例如: [$a$b] 是错误的,必须写成 [ $a $b ]

2. 常见的算术运算命令
运算操作符与运算命令 意义
(()) 用于整数运算的常用运算符,效率很高
let 用于整数运算,类似(())
expr 可用于整数运算,但还有其它很多功能
bc linux下的一个计算器程序(适合整数以及小数运算)
$[] 用于整数计算
awk awk即可用于整数运算,也可用于小数运算
declare 定义变量值和属性,-i参数可以用于定义整形变量,做运算

二. 关系运算符

在日常工作中,我们除了要进行数学运算之外,有时候还要进行关系运算,所谓的关系运算就是大于,等于,小于等等。

**关系运算符只支持数字,不支持字符串,除非字符串的值是数字。****

下表列出了常用的关系运算符,假定变量 a 为 10,变量 b 为 20:

运算符 说明 举例
-eq 检测两个数是否相等,相等返回 true。 [ a -eqb ] 返回 false。
-ne 检测两个数是否不相等,不相等返回 true。 [ a -neb ] 返回 true。
-gt 检测左边的数是否大于右边的,如果是,则返回 true。 [ a -gtb ] 返回 false。
-lt 检测左边的数是否小于右边的,如果是,则返回 true。 [ a -ltb ] 返回 true。
-ge 检测左边的数是否大于等于右边的,如果是,则返回 true。 [ a -geb ] 返回 false。
-le 检测左边的数是否小于等于右边的,如果是,则返回 true。 [ a -leb ] 返回 true。

关系运算符实例练习:

#!/bin/bash

a=10
b=20

if [ a -eqb ]
then
   echo "a -eqb : a 等于 b"
else
   echo "a -eqb: a 不等于 b"
fi

if [ a -neb ]
then
   echo "a -neb: a 不等于 b"
else
   echo "a -neb : a 等于 b"
fi

if [ a -gtb ]
then
   echo "a -gtb: a 大于 b"
else
   echo "a -gtb: a 不大于 b"
fi

if [ a -ltb ]
then
   echo "a -ltb: a 小于 b"
else
   echo "a -ltb: a 不小于 b"
fi

if [ a -geb ]
then
   echo "a -geb: a 大于或等于 b"
else
   echo "a -geb: a 小于 b"
fi

if [ a -leb ]
then
   echo "a -leb: a 小于或等于 b"
else
   echo "a -leb: a 大于 b"
fi

执行结果:

[root@ecs-c13b ~]# bash ysf.sh 
10 -eq 20: a 不等于 b
10 -ne 20: a 不等于 b
10 -gt 20: a 不大于 b
10 -lt 20: a 小于 b
10 -ge 20: a 小于 b
10 -le 20: a 小于或等于 b
[root@ecs-c13b ~]# 

三. 布尔运算符

下表列出了常用的布尔运算符,假定变量 a 为 10,变量 b 为 20:

运算符 说明 举例
! 非运算,表达式为 true 则返回 false,否则返回 true。 [ ! false ] 返回 true。
-o 或运算,有一个表达式为 true 则返回 true。 [ a -lt 20 -ob -gt 100 ] 返回 true。
-a 与运算,两个表达式都为 true 才返回 true。 [ a -lt 20 -ab -gt 100 ] 返回 false。

布尔运算符实例如下:

#!/bin/bash

a=10
b=20

if [ a !=b ]
then
   echo "a !=b : a 不等于 b"
else
   echo "a ==b: a 等于 b"
fi

if [ a -lt 100 -ab -gt 15 ]
then
   echo "a 小于 100 且b 大于 15 : 返回 true"
else
   echo "a 小于 100 且b 大于 15 : 返回 false"
fi

if [ a -lt 100 -ob -gt 100 ]
then
   echo "a 小于 100 或b 大于 100 : 返回 true"
else
   echo "a 小于 100 或b 大于 100 : 返回 false"
fi

if [ a -lt 5 -ob -gt 100 ]
then
   echo "a 小于 5 或b 大于 100 : 返回 true"
else
   echo "a 小于 5 或b 大于 100 : 返回 false"
fi
[root@ecs-c13b ~]# bash ysf.sh 
10 != 20 : a 不等于 b
10 小于 100 且 20 大于 15 : 返回 true
10 小于 100 或 20 大于 100 : 返回 true
10 小于 5 或 20 大于 100 : 返回 false
[root@ecs-c13b ~]# 

四. 逻辑运算符

以下介绍 Shell 的逻辑运算符,假定变量 a 为 10,变量 b 为 20:
逻辑运算符实例如下:

[root@ecs-c13b ~]# cat  ysf.sh 
#!/bin/bash

a=10
b=20

if [[ a -lt 100 &&b -gt 100 ]]
then
   echo "返回 true"
else
   echo "返回 false"
fi

if [[ a -lt 100 ||b -gt 100 ]]
then
   echo "返回 true"
else
   echo "返回 false"
fi

返回结果:

[root@ecs-c13b ~]# bash ysf.sh 
返回 false
返回 true

五. 字符串运算符

下表列出了常用的字符串运算符,假定变量 a 为 “abc”,变量 b 为 “efg”:

运算符 说明 举例
= 检测两个字符串是否相等,相等返回 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/bash

a="abc"
b="efg"

if [ a =b ]
then
   echo "a =b : a 等于 b"
else
   echo "a =b: a 不等于 b"
fi

if [ a !=b ]
then
   echo "a !=b : a 不等于 b"
else
   echo "a !=b: a 等于 b"
fi

if [ -z a ]
then
   echo "-za : 字符串长度为 0"
else
   echo "-z a : 字符串长度不为 0"
fi

if [ -n "a" ]
then
   echo "-n a : 字符串长度不为 0"
else
   echo "-na : 字符串长度为 0"
fi

if [ a ]
then
   echo "a : 字符串不为空"
else
   echo "$a : 字符串为空"
fi

返回结果:

**[root@ecs-c13b ~]# bash ysf01.sh 
abc = efg: a 不等于 b
abc != efg : a 不等于 b
-z abc : 字符串长度不为 0
-n abc : 字符串长度不为 0
abc : 字符串不为空**

六. 文件测试运算符

文件测试运算符用于检测 Unix 文件的各种属性。
属性检测描述如下:

操作符 说明 举例
-b file 检测文件是否是块设备文件,如果是,则返回 true。 [ -b $file ] 返回 false。
-c file 检测文件是否是字符设备文件,如果是,则返回 true。 [ -c $file ] 返回 false。
-d file 检测文件是否是目录,如果是,则返回 true。 [ -d $file ] 返回 false。
-f file 检测文件是否是普通文件(既不是目录,也不是设备文件),如果是,则返回 true。 [ -f $file ] 返回 true。
-g file 检测文件是否设置了 SGID 位,如果是,则返回 true。 [ -g $file ] 返回 false。
-k file 检测文件是否设置了粘着位(Sticky Bit),如果是,则返回 true。 [ -k $file ] 返回 false。
-p file 检测文件是否是有名管道,如果是,则返回 true。 [ -p $file ] 返回 false。
-u file 检测文件是否设置了 SUID 位,如果是,则返回 true。 [ -u $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。

其他检查符:

  • -S: 判断某文件是否 socket。
  • -L: 检测文件是否存在并且是一个符号链接。

总结

本文主要介绍了各类运算符,这些运算符为后期你熟练掌握shell脚本打下了基础。 因为条件语句,大多基于这些运算符来做判断。

互联网老辛:
深耕互联网领域已经12年,做过开发工程师,运维架构师,技术总监,讲师,实训主任,如今又涉足自媒体; 幸运的是无论是做技术还是做讲师,我都是从小兵干到管理。目前已有学员3000+,以后还会更多; 师者,传道授业解惑也,在技术极客的路上我将继续前行;

本文链接:http://www.geekyunwei.com/2038.html

网友评论comments

发表评论

邮箱地址不会被公开。 必填项已用*标注

暂无评论

Copyright © 2021 极客运维 备案号: 京ICP备2021004281号
扫二维码
扫二维码
返回顶部