测试命令—test
可以对特定条件进行测试,并根据返回值来判断条件是否成立(返回值为 0 表示条件成立,反之不成立)
格式1:test 条件表达式 格式2:[ 条件表达式 ] 注:中括号这里一定要有空格
格式:[ 操作符 文件或目录 ]
常用的测试操作符
操作符 | 说明 |
---|---|
-d | 测试是否为目录(Directory) |
-e | 测试目录或文件是否存在(Exist) |
-f | 测试是否为文件(File) |
-r | 测试当前用户是否有权限读取(Read) |
-w | 测试当前用户是否有权限写入(Write) |
-x | 测试当前用户是否有权限执行(Excute) |
-L | 测试是否为符号链接 |
注: -d 和 -f 还能判断目录或文件是否存在
符号链接
格式:[ 整数1 操作符 整数2 ]
常用的测试操作符
操作符 | 说明 |
---|---|
-eq | 等于 |
-ne | 不等于大于 |
-gt | 大于 |
-lt | 小于 |
-le | 小于等于 |
-ge | 大于等于 |
举例1
当前登录用户数小于等于5,输出“还行”
实例2
Mem的空余内存与100M比较,小于就输出警告当前内存不足,内存为多少兆。
(1)字符串可用来查看用户输入、系统环境等是否满足条件
(2)交互式操作的shell脚本中,用来判断用户输入的位置参数是否符合要求
格式1: [ 字符串1 = 字符串2 ] [ 字符串1 != 字符串2 ] 格式2: [ -z 字符串 ] -检查字符串是否为空(Zero),对于未定义或赋予空值的变量将视为空串 [ -n 字符串 ] -检查字符串是否存在
常用的测试操作符
操作符 | 说明 |
---|---|
= | 第一个字符串与第二个字符串相同 |
!= | 第一个字符与第二个字符串不相同,“!”表示取反 |
-z | 字符串内容为空 |
-n | 判断是否有字符串存在 |
实操
给ACK赋值,一开始不给值,进行测试,查看输出结果。
然后给它赋值yes,进行测试,查看输出结果。
用于判断两个或多个条件之间的依赖关系
常用的操作符: -a或&& :逻辑与,“而且”的意思,前后条件需都成立 -o或|| :逻辑或,“或者”的意思,只需前后条件中一个成立 ! :逻辑否,“不”的意思 格式1:[ 表达式1 ] 操作符 [ 表达式2 ] 格式2:命令1 操作符 命令2
实操1
逻辑或的实例
实操2
vim ping.sh #!/bin/bash ping -c 3 -i 0.5 -W 2 $1 &> /dev/null && echo "$1 is online" || echo "$1 is offline" -c:发送包的个数 -i:发送包的间隔时间 -W:超时时间 -w:多少秒后停止 ping 命令操作
只有在条件成立的时候才会执行相应的操作,否则不执行。
格式: if 条件测试操作 then 命令序列 fi
举例(三种表达方式)
第一种:正常的if语句格式,看起来整洁,若报错,提示行数容易发现。(推荐使用)
if [ 3 -gt 2 ]
then
echo “ok”
fi
第二种:都集中在一行,用“;”隔开,报错不易发现。
if [ 3 -gt 2 ]; then echo “ok”; fi
第三种:由条件测试拼凑而。
[ 3 -gt 2 ] && echo “ok”
实操
针对两种情况执行不同的操作
格式: if 条件测试操作 then 命令序列 1 else 命令序列 2 fi
举例
查看80 端口是否在监听,如果在,输出网站服务已经在运行,反之,启动httpd服务。
针对if的特性,嵌套使用,进行多次判断。
格式: if 条件测试操作 1 then 命令序列 1 elif 条件测试操作 2 then 命令序列 2 [else] [命令序列 3] fi
举例
考试成绩100分为优秀;90 到99分,抄写10遍;70 到89分,抄写20遍;60到69分,抄写30遍;0到59分,全部抄写30遍。输入其他值,显示输入有误。
用于变量存在多种取值,对每种取值执行不同的命令。
格式: case 变量值 in 模式 1) 命令序列 1 ;; 模式 2) 命令序列 2 ;; * ) 默认命令序列 esac
举例
考试成绩100分为优秀;90 到99分,抄写10遍;70 到89分,抄写20遍;60到69分,抄写30遍;0到59分,抄写40遍。输入其他值,显示输入有误。
第一种方法
第二种方法(采用通配符)
掌握
(1)条件测试的语法(文件测试、整数值比较、字符串比较、逻辑测试)
(2)if条件语句(单分支、双分支、多分支)
(3)case语句的用法,及通配符的应用