目录
一、理论
1.条件测试
2.if语句
3.case语句
二、实验
1.实验一
2.实验二
3.实验三
4.实验四
5.实验五
6.实验六
7.实验七
一、理论
1.条件测试
(1)三种测试方法
① test命令测试
② [ ]测试(注意前后需要有空格)
表1 布尔值
boole | true(真) | false(假) | 使用场景 |
返回码 | 0 | 1 | Linux系统 shell脚本 |
1 | 0 | Java C |
③ [[ ]]加强版[ ],测试支持通配符和正则表达式
三种测试方法选项:
表2 条件测试选项
选项 | 功能 |
-d | 测试是否为文件夹 |
-f | 测试是否为普通文件 |
-e | 测试文件或目录是否存在 |
-a | 测试文件或目录是否存在,不建议使用此选项。取反!=时echo $?是错误的返回值。 |
-L | 测试是否为软连接文件 |
-r | 判断当前用户是否有读权限,根据实际情况返回结果,不是按ll显示的文件属性权限。 |
-w | 判断当前用户是否有写权限,根据实际情况返回结果,不是ll显示的文件属性权限。 |
-x | 判断当前用户是否有可执行权限,根据实际情况返回结果,root账户时其他用户有执行权限root账户也有,若其他账户没有执行权限则root也没有。 |
(2) 正整数值比较
比较方法使用上述三种条件测试:
① test命令
② [ ] 注意前后空格
③ [[ ]]注意前后空格
表3 正整数比较选项
选项 | 功能 | |
-eq | 比较第一个正整数是否等于(equal)第二个正整数 | == |
-ne | 比较第一个正整数不等于(not equal)第二个正整数 | != |
-gt | 比较第一个正整数是否大于(Greate than)第二个正整数 | > |
-lt | 比较第一个正整数是否小于(Lesser than)第二个正整数 | < |
-ge | 比较第一个正整数是否大于等于(Greate or equal )第二个正整数 | |
-le | 比较第一个正整数是否小于等于(Lesser or equal)第二个正整数 |
(3)字符串笔记
[ 字符窜1 = 字符窜2 ] 或者 [ 字符窜1 == 字符窜2 ] 判断是否相同
[ 字符窜1 != 字符窜2 ] 判断是否不相同
[ -z "字符串" ] -z:判断字符串是否为空;或者指定的变量是否为空值
[ -n “字符串” ] -n:检查是否有字符串存在
(4)逻辑测试
① 格式1:[ 表达式1 ] 操作符 [ 表达式2 ]
② 格式2:命令1 操作符 命令2
操作符:
&&或-a 表示且的意思,前面表达式或命令1为真才会执行操作符后面的表达式2或命令2。一假则为假。
||或-o 表示或的意思,前面表达式1或命令1为真则整个表达式为真,前面表达式为假或命令为假才会执行后面的表达式2或命令2 。一真则为真。
! 逻辑否。
(5)三元运算符
[ 表达式 ] && a || b 等价于if双分支
[ 表达式 ] && a 等价于if单分支
2.if语句
(1)单分支的if语句
(2)双分支的if语句
(3)多分支的if语句
3.case语句
if的多分支是逐条判断,相对而言效率会低一些,而case语句,不满足的条件直接跳过,相对执行效率快一些。
二、实验
1.实验一
检查用户家目录中的 test.sh 文件是否存在,并且检查是否有执行权限
(1)脚本截图
(2)运行结果
2.实验二
要求判断秒数大于0且小于等于10秒的进入选拔赛,大于10秒的都淘汰,如果输入其它字符则提示重新输入;进入选拔赛的成员再进一步判断男女性别,男生进男生组,女生进女生组,如果输入错误请提示错误
(1)脚本截图
(2)运行结果
3.实验三
用case语句解压根据后缀名为 .tar.gz 或 .tar.bz2 的压缩包到 /opt 目录
(1)脚本截图
(2)运行结果
4.实验四
提示用户输入内容,使用if 语句判断输入的内容是否为整数。
(1)脚本截图
(2)运行结果
5.实验五
根据上一题再判断输入的内容是奇数还是偶数
(1)脚本截图
(2)运行结果
6.实验六
用if 语句判断主机是否存活ping -c 5
不显示ping次数
(1)脚本截图
(2)运行结果
显示ping次数
(1)脚本截图
(2)运行结果
7.实验七
用case语句在/etc/init.d/目录中写一个firewalld脚本,并加入到系统服务管理中使能够使用 service firewalld start|stop|restart|status 来管理firewalld服务,要求如果命令选项不对,则提示 “用法: $0 {start|stop|status|restart}”。
(1)脚本截图
(2)运行结果