第三章 条件测试和结构化语句
知识要点
- 条件测试
- if语句
- for循环语句
条件测试操作
test命令
测试特定的表达式是否成立,当条件成立时,测试语句的返回值是0,否则为其他值
格式1:test 条件表达式
格式2:[ 条件表达式 ]
注释:格式2中的条件表达式和方括号之间至少有一个空格。
常见的测试类型
- 测试文件状态
- 整数值的比较
- 字符串的比较
- 逻辑测试
文件测试
格式:[ 操作符 文件或者目录 ]
常用的测试操作符
-d:测试是否为目录(directory)
-e:测试目录或者文件是否存在(exist)
-f:测试是否为文件(file)
-s:测试文件存在且内容非空(仅有1个空格是非空)
-r:测试当前用户是否有权限读取(read)
-w:测试当前用户是否有权限写入(write)
-x:测试当前用户是否有权限执行(excute)
常用的测试操作符
整数值比较
整数值比较传统方法
格式:[ 整数1 操作符 整数2 ]
常用的测试操作符
-eq:等于(equal)
-ne:不等于(not equal)
-gt:大于(greater than)
-lt:小于(lesser than)
-le:小于等于(lesser or equal)
-ge:大于等于(greater or equal)
常用的测试操作符
双圆括号整数值比较推荐方法
格式(( 整数1 操作符 整数2 ))
字符串比较
字符串比较传统方法
格式1:[ 字符串1 = 字符串2]
[ 字符串1 != 字符串2]
格式2:[ -z 字符串 ]
常用的测试操作符
=:字符串内容相同
!=:字符串内容不同,!号表示相反的意思
-z:字符串内容为空
-n:字符串非空
字符串比较时建议加上双引号
双方括号字符串比较推荐方法
格式:[[字符串1 = 字符串2 ]]
可以解决变量中带空格的问题
可以使用统配符
逻辑测试
格式1:[表达式1] && 或者 || [表达式2] …
格式2:[表达式1 -a 或者 -o 表达式2]
常用的测试操作符
-a 或&&:逻辑与,“而且”的意思
前后两个表达式都为真时整个表达式结果才为真,否则为假
-o或 ||:逻辑或,“或者”的意思
操作符两边至少一个为真时,结果为真,否则结果为假。
!:逻辑否
当指定的条件不成立时,返回结果为真。
实验案例1
使用条件测试完成下列任务
测试/分区磁盘空间,小于10%,显示“一切正常”,否则显示“当前的磁盘空间是磁盘空间% 警告”
统计当前系统的登陆用户,登陆用户小于3个,显示“一切正常”,否则显示“登陆用户已经有:个数”
测试当前主机eth0的网卡入站和出站流量,只要两个都大于200MiB,就显示“警告”;
当内存空闲空间小于内存的5%时,显示“内存不足”,否则显示“当前空闲内存是:内存空闲数值”
if语句的结构
单分支结构
双分支结构
多分支结构
exit
默认情况下shell脚本中最后一条命令的退出状态退出,exit后的命令不会被执行,马上退出脚本
exit n n是0-255的退出状态数值,不写n默认是0。
for语句结构
读取不同变量的值,用来逐个执行同一组命令
bash shell支持c式for循环
for((i=1;i<10;i++))
根据脚本输入的参数创建任意个文件
编写脚本清空所有arp缓存记录
#!/bin/bash
for i in $(arp | tail -n +2 | tr -s ' ' | cut -d' ' -f1)
do
arp -d $i
done
产生10个随机数
批量添加用户
查找用户的path环境变量中每个目录下有多少个文件要求判断目录是否存在
查找uid大于等于500小于等于60000的用户,检查它们在"/tmp"目录中拥有的子目录或者文件数量,如果超过10个,则列出具体个数以及对应的用户账号
编写脚本统计1000以内个数是十位2倍的数字的个数例如(24)
根据ip检查主机状态
根据ip检查网络中存活的主机ip
循环控制语句
break语句
在for、while、until等循环语句中,用于跳出当前所在的循环体,执行循环体后的语句
continue
在for、while、until等循环语句中,用于跳出循环体内余下的语句,重新判断条件以便执行下一次循环