Shell不得不学之条件测试、if语句及分支
一 、条件测试操作
1.1、test命令
测试表达式是否成立,若成立返回时,否则返回其他数值
格式1:test 条件表达式
格式2:[ 条件表达式 ]
1.2、文件测试
[ 操作符 文件或目录 ]
常用的测试操作符
-d :测试是否为目录(Directory)
-e :测试目录或文件是否存在(Exist)
-f :测试是否为文件(File)
-r :测试当前用户是否有权限读取(Read)
-w :测试当前用户是否有权限写入(Write)
-x :测试当前用户是否有权限执行(eXcute)
[root@localhost ~] #【-d /media/cdrom】&&echo "yes"
逻辑与,“而且”的意思
1.3、 整数值比较
[ 整数1 操作符 整数2 ]
常用的测试操作符
-eq :等于(Equal)
-ne :不等于(Not Equal)
-gt :大于(Greater Than)
-lt :小于(Lesser Than)
-le :小于或等于(Lesser or Equal)
-ge :大于或等于(Greater or Equal)
1.4、 浮点运算
bash不支持浮点运算,如果需要进行浮点运算,需要借助bc,awk处理。
#!/bin/bash
#加
f=$ (echo "4.3+2.5"|bc)
echo "4.3+2.5=$f"
#减
f=$ (echo "4.3-2.5"|bc)
echo "4.3-2.5=$f"
#乘
f=$(echo "4.30*2.50"|bc)
echo "4.3*2.5=$f"
#除
f=$(echo "4.3/2.5"|bc)
echo "4.3/2.5=$f"
#混合运算
f=$(echo "2.2/(2.2-1.1)*2+1.1"|bc)
echo "2.2/(2.2-1.1) *2+1.1=$f"
awk BEGIN
#加
f=$(awk 'BEGIN{print 4.5+3.4 }')
echo "4.5+3.4"=$f
减
f=$ (awk 'BEGIN{print 4.5-3.4 }')
echo "4.5-3.4=$f"
乘
f=$ (awk 'BEGIN{print 4.5*3.4 }')
echo "4.5*3.4=$f"
除
f=$ (awk 'BEGIN{print 4.5/3.4 )')
echo "4.5/3.4=$f"
混合
f=$(awk 'BEGIN{print (4.5-3.4)*2+3 }')
echo " (4.5-3.4) *2+3=$f"
1.5、字符串比较
格式1:
[ 字符串1 = 字符串2 ]
[ 字符串1 != 字符串2 ]
格式2:
[ -z 字符串 ]
常用的测试操作符
= :字符串内容相同
!= :字符串内容不同,!表示相反的意思
-z : 字符串内容为空
-n:检测字符串是否存在
1.6、逻辑测试
格式1:
[ 表达式1 ] 操作符 [ 表达式2 ] ···
格式2:
命令1 操作符 命令2 ·······
常用的测试操作符
-a或&& :逻辑与,“而且”的意思
-o或|| :逻辑或,“或者”的意思
! :逻辑否,代表取反含义
同一个括号内用-a或-o
两个括号间用&& 或||
&&、||操作符能够正常存在于[[ ]]条件判断结构中,但是如果出现在[]结构中的话,会报错
a=5
[ $a -ne 1] && [$a !=2 ]等同于 [ $a -ne 1 -a $a != 2 ]
[[ $a != 1 && $a != 2]]
[[ 2 -lt 3]] && echo true || false
[[ 2 -ge 3]] && echo true || false
二 、 if语句的结构
2.1 、单分支结构
fi结束判断,exit 0正常退出,exit 1异常退出
2.2 、双分支结构
2.3 、多分支结构
三 、 if语句应用示例
3.1、 单分支if语句
判断挂载点目录,若不存在则自动创建
3.2、 双分支if语句
判断目标主机是否存活,显示检测结果
3.3 、多分支语句
判断分数范围,分出优秀,合格,不合格三档