Shell脚本攻略:条件语句if、case

目录

一、理论

1.条件测试

2.if语句

3.case语句

二、实验

1.实验一

2.实验二

3.实验三

4.实验四

5.实验五

6.实验六

7.实验七


一、理论

1.条件测试

(1)三种测试方法
      ①  test命令测试

      ②  [   ]测试(注意前后需要有空格)

Shell脚本攻略:条件语句if、case_第1张图片

表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语句

Shell脚本攻略:条件语句if、case_第2张图片

(2)双分支的if语句

Shell脚本攻略:条件语句if、case_第3张图片

(3)多分支的if语句

Shell脚本攻略:条件语句if、case_第4张图片

3.case语句

(1)case语句

if的多分支是逐条判断,相对而言效率会低一些,而case语句,不满足的条件直接跳过,相对执行效率快一些。

Shell脚本攻略:条件语句if、case_第5张图片

(2)基本用法

Shell脚本攻略:条件语句if、case_第6张图片

 case、in 和 esac 都是 Shell 关键字,expression 表示表达式,pattern 表示匹配模式
expression 既可以是一个变量、一个数字、一个字符串,还可以是一个数学计算表达式,或者是命令的执行结果,只要能够得到 expression 的值就可以。
pattern 可以是一个数字、一个字符串,甚至是一个简单的正则表达式。
case 会将 expression 的值与 pattern1、pattern2、pattern3 逐个进行匹配:

       ① 如果 expression 和某个模式(比如 pattern2)匹配成功,就会执行这模式(比如 pattern2)后面对应的所有语句(该语句可以有一条,也可以有多条),直到遇见双分号;;才停止;然后整个 case 语句就执行完了,程序会跳出整个 case 语句,执行 esac 后面的其它语句。

       ② 如果 expression 没有匹配到任何一个模式,那么就执行*)后面的语句(*表示其它所有值),直到遇见双分号;;或者esac才结束。*)相当于多个 if 分支语句中最后的 else 部分

二、实验

1.实验一

  检查用户家目录中的 test.sh 文件是否存在,并且检查是否有执行权限

(1)脚本截图

Shell脚本攻略:条件语句if、case_第7张图片

(2)运行结果

2.实验二

       要求判断秒数大于0且小于等于10秒的进入选拔赛,大于10秒的都淘汰,如果输入其它字符则提示重新输入;进入选拔赛的成员再进一步判断男女性别,男生进男生组,女生进女生组,如果输入错误请提示错误

(1)脚本截图

Shell脚本攻略:条件语句if、case_第8张图片

(2)运行结果

 Shell脚本攻略:条件语句if、case_第9张图片

3.实验三

用case语句解压根据后缀名为 .tar.gz 或 .tar.bz2 的压缩包到 /opt 目录

(1)脚本截图

Shell脚本攻略:条件语句if、case_第10张图片

(2)运行结果

Shell脚本攻略:条件语句if、case_第11张图片

4.实验四

提示用户输入内容,使用if 语句判断输入的内容是否为整数。

(1)脚本截图

Shell脚本攻略:条件语句if、case_第12张图片

(2)运行结果

 Shell脚本攻略:条件语句if、case_第13张图片

5.实验五

根据上一题再判断输入的内容是奇数还是偶数

(1)脚本截图

Shell脚本攻略:条件语句if、case_第14张图片

(2)运行结果

 Shell脚本攻略:条件语句if、case_第15张图片

6.实验六

用if 语句判断主机是否存活ping -c 5

不显示ping次数

(1)脚本截图

Shell脚本攻略:条件语句if、case_第16张图片

(2)运行结果

Shell脚本攻略:条件语句if、case_第17张图片

显示ping次数

(1)脚本截图

Shell脚本攻略:条件语句if、case_第18张图片

(2)运行结果

Shell脚本攻略:条件语句if、case_第19张图片

7.实验七

 用case语句在/etc/init.d/目录中写一个firewalld脚本,并加入到系统服务管理中使能够使用 service firewalld start|stop|restart|status 来管理firewalld服务,要求如果命令选项不对,则提示 “用法: $0 {start|stop|status|restart}”。

(1)脚本截图 

Shell脚本攻略:条件语句if、case_第20张图片

(2)运行结果

Shell脚本攻略:条件语句if、case_第21张图片

 Shell脚本攻略:条件语句if、case_第22张图片

你可能感兴趣的:(git)