开发技术

Linux | shell脚本-比较判断和运算语句

一、简介

在我们写shell脚本的过程中,经常需要作比较判断,例如比较哪个数字大,判断文件是否存在,判断文件是否是目录,判断是否为真等操作。有时候我们还需要做运行,例如加减乘除等等,今天就来简单介绍比较表达式和运行表达式。

二、shell比较判断

1、文件状态:
表达式:[ -e 文件路径 ] 有空格隔开
例如:[ -e /root ] 判断/root 是否存在
(1) -e 是否存在 存在为真
(2) -d 是否是目录 是目录为真
(3) -f 是否是文件 是文件 为真
(4) -x 是否有执行权限 有执行权限为真
(5) -w 是否有写权限 有写权为真
(6) -r 是否有读权限 有读权限为真
 
2、整数值比较
[ num1 选项 num2 ]
例如:[ 2 -eq 2 ] 或者用变量[ $a -eq $b ]
(1) -eq 等于
(2) -ne 不等于
(3) -gt 大于
(4) -ge 大于等于
(5) -lt 小于
(6) -le 小于等于
 
3、字符比较
[ “string字串1” 选项 “string字串2” ]
例如:[ $name == “jim” ]
注意:选项和字串两边有空格!!!!字符一定用双引号引住。
(1) = = 相等 相等为真
(2) != 不相等 不相等为真 0
(3) -z 空 空为真
(4) !-z 非空 非空为真
 
4、逻辑判断:(两个或两个以上判断条件时使用逻辑比较)
(1) 逻辑 与:
&& 多个条件同时成立 [条件1] && [条件2]
(2) 逻辑 或:
|| 多个条件只要有一个条件成了就可以 [条件1] || [条件2]
(3) 逻辑 非 !=取反
PS:两种表达方式:
1.&&—-[ 10 -gt 8 ] && [ 5 -lt 6 ] 2. -a 用法:[ 10 -gt 8 -a 5 -lt 6 ]
1.||—-[ 10 -gt 8 ] || [ 5 -lt 6 ] 2. -o 用法:[ 10 -gt 8 -0 5 -lt 6 ]
(4) 调用变量时”” 与”的区别
字符用两个都一样输出,当变量时,单引号输出字符,双引号 使用变量的功能
例如:a =10 b=10
“$a + $b”=num2 结果是 10 + 10 =num2
‘$a + $b’=num2 结果是 $a + $b =num2

三、shell运算语法

1、运算符
加+
减 –
乘\*
除 /
取余 %
自加1 ++ i=0;let i++;echo $i
自减1 — j=10;let j– ; echo $j
 
2、运算命令\
(1) expr命令 运算符: + – \* / %
expr 整数1 整数2… 整数值由变量提供,直接给出运算结果
`expr $num1 + $num2`
(2) let命令
操作变量值,只运算,不输出结果
i=0;let i++;echo $i
i=0;i++;echo $i
(3) 使用$[]或者 $(())表达式(需要借助echo输出结果,运算类型与expr类似)
PS:乘法* 不需要加转义符 \
使用变量时,直接指定变量名,不用加$符号
echo $[]
echp $(())
1)例子:a=10 b=10
没加转义:\
加转义:\
2)a=10 b=10
echo $((a*b))
(4) 变量的递增、递减等操作
表达式的简化:
+=x 每次自加x
-=x 每次自减x
i=i+2 —-> i+=2
i=i-2 —-> i-=2
i=i-1 —-> i–
i=i*2 —-> i*=2
i=i+1 —-> i++
i=i%2 —-> i%=2
(5) 实战例子:加减乘除计算器
vim test.sh
运行结果:

四、重定向(改变数据的输出设备)

1、重定向输出
> 覆盖
>> 追加
2、重定向输入
< 覆盖
<< 追加
3、重定向错误输出
2> 覆盖
2>> 追加
4、重定向输出和错误输出
&> 覆盖
&>> 追加
5、/dev/null 一个黑洞设备

五、实战

(1) &和|| 脚本中的使用,重定向的使用
&& 前面的操作执行成功后面才继续执行,反之不执行后面的操作
例子:ping -c 3 1.1.1.1 &> /dev/null && echo “on line” (命令行不输出ping结果,直接输出结果)
例子: ping -c 3 121.201.88.88 2> /dev/null && echo “on line”(这个在命令行输出ping的结果,并且输出结果)
成功就输出内容 失败就什么都不输出
Ping失败,不输出内容
|| 前面的操作执行,后面的操作才执行。若前面的操作执行成功,后面的操作就不执行。
ping -c 2 121.201.88.89 || echo “pc not online”
(2) 实战:检测主机是否在线
vim test.sh
下期预告:shell脚本-条件判断语句if和循环语句for
睿江云计算官网链接:https://www.eflycloud.com/home?from=RJ_0024
Be the First to comment.

Leave a Comment

电子邮件地址不会被公开。