1、条件测试
(1)文件测试与整数测试
(2)字符串测试与逻辑测试
2、if语句
(1)if单分支语句
(2)if双分支语句
(3)if多分支语句
3、case分支语句
测试表达式是否成立,若成立返回0,否则返回其他数值。
格式1: test 条件表达式
格式2:[ 条件表达式 ]
[操作符 文件或目录]
-d:测试是否为目录(Directory)
-e:测试目录或文件是否存在(Exist)
-f:测试是否为文件(File)
-r:测试当前用户是否有权限读取(Read)
-w:测试当前用户是否有权限写入(Write)
(1)整数值比较
格式:[整数1 操作符 整数2]
(2)常用的测试操作符
-eq:等于(Equal)
-ne:不等于(not equal)
-gt:大于(greater than)
-lt:小于(lesser than)
-le:小于或等于(lesser or equal)
-ge:大于或等于(greater or equal)
#!/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”
#加
f=$ (awk 'BEFIN{print 4.5+3.4 } ’ )
echo “4.5+3.4=$f”
#减
f=$ (awk 'BEFIN{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)字符串比较
格式1:[ 字符串1 = 字符串2 ] [ 字符串1 != 字符串2 ]
格式2:[ -z 字符串 ] #检查字符串是否为空,对于未定义或赋予空值的变量将视为空串
[ -n 字符串] #检查是否有字符串存在
(2)常用的测试操作符
=:字符串内容相同
!:字符串内容不同,!号宝石相反的意思
-z:字符串内容为空
-n:检测字符串是否存在
-a或&&:逻辑与,“而且”的意思
-o或||:逻辑或,“或者”的意思
!:逻辑否
(3)逻辑测试
格式1:[ 表达式1 ] 操作符 [ 表达式2 ]
格式2:命令1 操作符 命令2
基本格式:if 条件测试操作
then 命令序列
fi
举例:
if 磁盘已用空间>80%
then 报警
fi
双分支结构(基本格式):
if 条件测试操作
then 命令序列1
else 命令序列2
fi
双分支结构(举例):
if 80端口是否在监听
then 网站服务已在运行
else 启动httpd服务
fi
多分支结构(基本格式):
if 条件测试操作1
then 命令序列1
elif 条件测试操作2
then 命令序列2
else
命令序列3
fi
多分支结构(举例):
if 分数为85~100之间
then 判为优秀
elif 分数为70~84之间
then 判为合格
else
判为不合格
fi
(1)单分支if结构
(2)多分支if结构
(1)case语句的结构
针对变量额不同取值,分别执行不同的命令序列。
这种情况与多分支的if语句非常相似,只不过if语句需要判断多个不同条件,而case语句指示判断一个变量的不同取值。
case行尾必须为单词”in“,每一模式必须以右括号”)“结束。
双分号”;;“表示命令序列的结束。
模式字符串中,可以用方括号表示一个连续范围,如”[0-9]“;还可以用竖杠符号”|“表示”或“,若”A|B“。
最后的”)“表示默认模式,其中的*相当于通配符。
格式:
case 变量值 in
模式1)
命令序列1
;;
模式2)
命令序列2
;;
…
*)
默认命令序列
esac
举例:
case 分数 in
85~100)
评为优秀
;;
70~84)
评为合格
;;
…
*)
判为不合格
esac