第三章条件测试和结构化语句1

第三章 条件测试和结构化语句

知识要点

  • 条件测试
  • 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循环

  1. for((i=1;i<10;i++))

根据脚本输入的参数创建任意个文件

编写脚本清空所有arp缓存记录

  1. #!/bin/bash
  2. for i in $(arp | tail -n +2 | tr -s ' ' | cut -d' ' -f1)
  3. do
  4. arp -d $i
  5. done

产生10个随机数

批量添加用户

查找用户的path环境变量中每个目录下有多少个文件要求判断目录是否存在

查找uid大于等于500小于等于60000的用户,检查它们在"/tmp"目录中拥有的子目录或者文件数量,如果超过10个,则列出具体个数以及对应的用户账号

编写脚本统计1000以内个数是十位2倍的数字的个数例如(24)

根据ip检查主机状态

根据ip检查网络中存活的主机ip

循环控制语句
break语句
在for、while、until等循环语句中,用于跳出当前所在的循环体,执行循环体后的语句

continue
在for、while、until等循环语句中,用于跳出循环体内余下的语句,重新判断条件以便执行下一次循环

原文地址:https://www.cnblogs.com/haitianjingyu/p/6973699.html