if/case条件测试语句

一、条件测试
1.1 返回码 $?
$? :返回码,用来判断命令或者脚本是否执行成功(最近的一条)。

0 :true,为真就是成功,成立。

非0 :false,失败或者异常。

1.2 test命令
可以进行条件测试,然后根据返回值来判断条件是否成立。

-e :exist,测试目录或者目录是否存在

-d :directory,测试目录是否存在

-f :file,测试普通文件是否存在

-r :read,测试当前用户是否对文件/目录有读权限

-w :write,测试写权限

-x :execution,测试执行权限

1.3 比较符
1.3.1 整数比较符
注意:以下操作符只能用于整数比较

-eq:等于,equal

-ne:不等于,not equal

-gt:大于,greater than

-lt:小于,less than

-ge:大于等于,gt或eq

-le:小于等于,lt或eq

1.3.2 类C语言的整数比较符
注意:以下操作符一般不能用test进行比较

==:等于,既可以比较数字,也可以比较字符串

!=:不等于

>:大于

<:小于

>=:大于等于

<=:小于等于

这种比较符一般用于比较变量或者字符串。

1.3.3 比较符格式
[ ] :注意格式,所有参数和符号都要以空格隔开

[[ ]] :可以使用更高级的模式,可以使用正则表达式。而且,在双中括号中使用字符串的时候可以不加引号,而不用担心引起歧义。

(( )) :只能使用算数比较符

1.3.4 逻辑与和逻辑或
与:&&,或者-a,条件都满足才成立

或:||,或者-o,满足一个条件即成立

注意:-a 和 -o 只能在 [ ]中使用,[[ ]]中或者两个[ ]之间只能用&& ||

二、if语句
2.1 if语句的基本组成
if :后面是条件测试语句
then :后面跟命令序列,只有条件测试语句成立,才会执行then的命令模块
elif:后面也是条件测试语句,用于多分支结构
else:后面跟命令序列,所有的条件测试语句均不满足时,执行else的命令模块
fi :结束语句
2.2 单分支结构
在/opt目录下创建t1.sh

if条件满足才执行then

2.2 双分支结构

要求:比较两个整数的大小

/opt目录下创建t2.sh

if条件满足执行then

if条件不满足执行else

2.3 多分支结构
要求:提示输入考试成绩,根据输入内容返回结果:

100分:天才!;85-99分:优秀!;60-84分:合格!;60分以下,不合格!

在/opt目录下创建t3.sh


if条件满足执行then

若if条件不满足,来到第一个elif,条件满足执行then

若第一个elif条件不满足,来到下一个elif,条件满足执行then

若if elif的条件都不满足,执行else下的命令

2.4 嵌套if结构
要求:检查用户家目录中的 test.sh 文件是否存在,并且检查是否有执行权限

在/opt目录下创建t4.sh


检验:


说明:嵌套if语句中,下一层if的条件测试是建立在上一层if的条件测试结果的前提下的。注意每一层if都有对应的fi结束语句。

三、case语句
case相当于if多分支结构

格式:

例:要求:用case语句解压根据后缀名为 .tar.gz 或 .tar.bz2 的压缩包到 /opt 目录,分别使用tar -zxvf和tar -jxvf

t5.sh:用位置变量传参的方式

检验:


.tar.bz2文件也是一样,这里不展示了。

例2:用case实现2.3的例子:要求提示输入考试成绩,根据输入内容返回结果:

100分:天才!;85-99分:优秀!;60-84分:合格!;60分以下,不合格!


四、练习
需求1
通过位置变量传参的方式,给脚本内部传一个ip地址

用if判断主机是否存活,若存活提示用户ip is online,而且要保存到/opt/hosts.txt文件,若主机无连接,提示用户 ip is offline

使用ping -c 5 检测连通性,但不显示ping的过程

test1.sh


第一行的解释:&> /dev/null,将前面ping的输出结果全部重定向到/dev/null,/dev/null 有一个非常有用的特性:它会立即丢弃所有写入它的数据,也被称为“数据黑洞”。这样将ping的结果重定向到/dev/null,就不会在终端上显示。

检验:


需求2
提示用户输入内容,使用if 语句判断输入的内容是否为整数。判断范围0-100。然后再判断输入的内容是奇数还是偶数。

提示:判断输入的内容是否为整数,可以用


-eq是整数比较符,如果变量不是整数,比如小数或者字符串会报错,并跳转到else执行,把报错信息重定向到/dev/null就不会在终端显示多余的信息。

实现:test2.sh


对检验奇数偶数的解释: $(($num%2)),对变量除以2取余数,余数为0则为偶数,余数为1则为奇数。

验证:


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

test3.sh:只允许输入整数


检验:


如果要实现小数判断,可以用bc实现,比如:


把两个小数变量比较的结果保存到result中,再用if语句对result进行判断,请自行探索。

需求4
用case语句控制 firewalld start|stop|restart|status 来管理firewalld服务,要求如果命令选项不对,则提示输入不正确:{start|stop|status|restart}
test4.sh:用传参的方式



检验:

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值