一, 简介
在我们写 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 $((ab))
(4) 变量的递增, 递减等操作
表达式的简化:
+=x 每次自加 x
-=x 每次自减 x
- i=i+2 ----> i+=2
- i=i-2 ----> i-=2
- i=i-1 ----> i--
- i=i2 ----> 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
来源: http://www.bubuko.com/infodetail-3073201.html