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

目录

一、理论

1.条件测试

2.if语句

3.case语句

二、实验

1.实验一

2.实验二

3.实验三

4.实验四

5.实验五

6.实验六

7.实验七


一、理论

1.条件测试

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

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

表1 布尔值

booletrue(真)false(假)使用场景
返回码01Linux系统 shell脚本
10Java 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语句

(1)case语句

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

(2)基本用法

 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)脚本截图

(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)运行结果

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值