【Linux】shell脚本实战-各类运算符介绍
文章目录
- 前言
- 一. 复习之前内容
- 1. 算术运算符
- 2. 常见的算术运算命令
- 二. 关系运算符
- 三. 布尔运算符
- 四. 逻辑运算符
- 五. 字符串运算符
- 六. 文件测试运算符
- 总结
前言
上几篇文章我们主要讨论了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==a==a==b] 是错误的,必须写成 [ $a == $b ]。
2. 常见的算术运算命令
运算操作符与运算命令 | 意义 |
---|---|
(()) | 用于整数运算的常用运算符,效率很高 |
let | 用于整数运算,类似(()) |
expr | 可用于整数运算,但还有其它很多功能 |
bc | linux下的一个计算器程序(适合整数以及小数运算) |
$[] | 用于整数计算 |
awk | awk即可用于整数运算,也可用于小数运算 |
declare | 定义变量值和属性,-i参数可以用于定义整形变量,做运算 |
二. 关系运算符
在日常工作中,我们除了要进行数学运算之外,有时候还要进行关系运算,所谓的关系运算就是大于,等于,小于等等。
关系运算符只支持数字,不支持字符串,除非字符串的值是数字。**
下表列出了常用的关系运算符,假定变量 a 为 10,变量 b 为 20:
运算符 | 说明 | 举例 |
---|---|---|
-eq | 检测两个数是否相等,相等返回 true。 | [ $a -eq $b ] 返回 false。 |
-ne | 检测两个数是否不相等,不相等返回 true。 | [ $a -ne $b ] 返回 true。 |
-gt | 检测左边的数是否大于右边的,如果是,则返回 true。 | [ $a -gt $b ] 返回 false。 |
-lt | 检测左边的数是否小于右边的,如果是,则返回 true。 | [ $a -lt $b ] 返回 true。 |
-ge | 检测左边的数是否大于等于右边的,如果是,则返回 true。 | [ $a -ge $b ] 返回 false。 |
-le | 检测左边的数是否小于等于右边的,如果是,则返回 true。 | [ $a -le $b ] 返回 true。 |
关系运算符实例练习:
#!/bin/basha=10
b=20if [ $a -eq $b ]
thenecho "$a -eq $b : a 等于 b"
elseecho "$a -eq $b: a 不等于 b"
fiif [ $a -ne $b ]
thenecho "$a -ne $b: a 不等于 b"
elseecho "$a -ne $b : a 等于 b"
fiif [ $a -gt $b ]
thenecho "$a -gt $b: a 大于 b"
elseecho "$a -gt $b: a 不大于 b"
fiif [ $a -lt $b ]
thenecho "$a -lt $b: a 小于 b"
elseecho "$a -lt $b: a 不小于 b"
fiif [ $a -ge $b ]
thenecho "$a -ge $b: a 大于或等于 b"
elseecho "$a -ge $b: a 小于 b"
fiif [ $a -le $b ]
thenecho "$a -le $b: a 小于或等于 b"
elseecho "$a -le $b: 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 -o $b -gt 100 ] 返回 true。 |
-a | 与运算,两个表达式都为 true 才返回 true。 | [ $a -lt 20 -a $b -gt 100 ] 返回 false。 |
布尔运算符实例如下:
#!/bin/basha=10
b=20if [ $a != $b ]
thenecho "$a != $b : a 不等于 b"
elseecho "$a == $b: a 等于 b"
fiif [ $a -lt 100 -a $b -gt 15 ]
thenecho "$a 小于 100 且 $b 大于 15 : 返回 true"
elseecho "$a 小于 100 且 $b 大于 15 : 返回 false"
fiif [ $a -lt 100 -o $b -gt 100 ]
thenecho "$a 小于 100 或 $b 大于 100 : 返回 true"
elseecho "$a 小于 100 或 $b 大于 100 : 返回 false"
fiif [ $a -lt 5 -o $b -gt 100 ]
thenecho "$a 小于 5 或 $b 大于 100 : 返回 true"
elseecho "$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/basha=10
b=20if [[ $a -lt 100 && $b -gt 100 ]]
thenecho "返回 true"
elseecho "返回 false"
fiif [[ $a -lt 100 || $b -gt 100 ]]
thenecho "返回 true"
elseecho "返回 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/basha="abc"
b="efg"if [ $a = $b ]
thenecho "$a = $b : a 等于 b"
elseecho "$a = $b: a 不等于 b"
fiif [ $a != $b ]
thenecho "$a != $b : a 不等于 b"
elseecho "$a != $b: a 等于 b"
fiif [ -z $a ]
thenecho "-z $a : 字符串长度为 0"
elseecho "-z $a : 字符串长度不为 0"
fiif [ -n "$a" ]
thenecho "-n $a : 字符串长度不为 0"
elseecho "-n $a : 字符串长度为 0"
fiif [ $a ]
thenecho "$a : 字符串不为空"
elseecho "$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脚本打下了基础。 因为条件语句,大多基于这些运算符来做判断。
【Linux】shell脚本实战-各类运算符介绍相关推荐
- Linux shell脚本基础学习详细介绍(完整版)一
Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提. 1. Li ...
- Linux shell脚本基础学习详细介绍(完整版)
Linux shell脚本基础学习这里我们先来第一讲,介绍shell的语法基础,开头.注释.变量和 环境变量,向大家做一个基础的介绍,虽然不涉及具体东西,但是打好基础是以后学习轻松地前提. 1. Li ...
- Linux shell脚本基础学习详细介绍(完整版)2
详细介绍Linux shell脚本基础学习(五) Linux shell脚本基础前面我们在介绍Linux shell脚本的控制流程时,还有一部分内容没讲就是有关here document的内容这里继续 ...
- 【shell】shell脚本实战-awk基本介绍
文章目录 前言 概念 awk常用的选项和命令 awk的选项 awk的环境变量 awk的运算符 awk的内置字符串函数 前言 我们之前学习过grep,sed,这两个工具的作用如下: grep和egrep ...
- 循序渐进学运维-shell脚本实战专栏
我是互联网老辛,关注我吧,给自己每天的进步找一个机会和理由,不要被无效信息淹没,免除知识焦虑 前言 shell脚本大家要做为重点来学习,shell写的好,可以不学Python,一样拿高薪: shell ...
- win7下运行linux命令,win7系统32位旗舰版iso运行linux shell脚本的操作办法
win7旗舰版是用户量最大的一款操作系统:有不少人在使用中都遇见了win7系统运行linux shell脚本的问题,对于电脑不太熟悉的朋友面对win7系统运行linux shell脚本便无计可施,其实 ...
- linux怎么判断网络是否正常运行,Linux shell脚本判断服务器网络是否可以上网
微信公众号:「小林coding」 用简洁的方式,分享编程小知识. Linux shell脚本判断网络畅通 介绍 在编写shell脚本时,有的功能需要确保服务器网络是可以上网才可以往下执行,那么此时就需 ...
- Linux Shell脚本入门到实战详解
一.shell 入门简介 1.什么是 shell shell 脚本简介 网上有很多 shell 的概念介绍,其实都很官方化,如果你对 linux 命令很熟悉,那么编写 shell 就不是一个难事,sh ...
- linux运维实战练习及linux shell脚本、awk、sed工具命令学习总结
一.linux shell 脚本 1.描述shell程序的运行原理(可附带必要的图形说明): Linux系统的shell作为操纵系统的外壳,为用户提供使用操纵系统的接口.它是命令语言.命令解释程序及程 ...
最新文章
- 想学单片机怎么入手?学单片机前先学什么?
- 概述自动机器学习(AutoML)
- 路径规划之 A* 算法
- python习题集整理汇总
- MyBatis从入门到精通:update用法、delete用法
- C语言中的多字节字符与宽字符
- 20201023:力扣第37场双周赛(上)
- 【leetcode】1018. 可被 5 整除的二进制前缀
- .Net Micro Framework移植基础(包编译通过)
- 1.13《推荐系统实践》笔记(上)
- Python:minicap实现快速截图
- 模仿 alexa 工具条
- vue中使用腾讯视频播放器
- Datawhale组队学习周报(第031周)
- 计算机双机对连局域网,图解双机/多机无线互联技巧_局域网教程
- 程序员如何不加班?—— 时间管理篇
- 计算机瑞士留学经验,瑞士留学生活分享
- cmd介绍及常用命令
- 企业微信oauth认证_OAuth验证接口
- 正则表达式匹配从指定字符开始到指定字符结束的字符串
热门文章
- python 11高级特性
- 力扣 792. 匹配子序列的单词数
- hana的date对应oracle日期,SAP HANA跟我学HANA系列之日期函数总结
- java8 functional_java8学习笔记(一):FunctionalInterface与Stream
- 2022高压电工考试题及答案
- linux搭建unturned服务器,【图片】【超详细UNTURNED最新开服教程】(包括权限组,服务器细节设置)【unturned吧】_百度贴吧...
- 【6.3 业务分析方法(15%)-业务数据分析】——CDA
- 计算机模拟及其应用,计算机模拟的优缺点及其应用分析
- 一个完整的电商运营方案
- centos6 安装bbr_centos6.5安装bbr