47. Shell脚本中if语句的定义与应用(含case语句的点名机制)

Lesson47 Shell脚本中if语句的定义与应用

1. if语句的定义

为了使shell脚本具有一定的“判断”能力,使用if语句根据不同的条件来完成不同的管理任务

条件测试类型:
整数测试
字符测试
文件测试

2. if语句的格式

最简单的if语句是只使用if的语句

if  condition
then
    statement(s)
fi
if     #如果
then   #那么
elif   #又如果
then   #那么
...    #如果,那么可以有任意多次
else   #否则(可加可不加)
fi     #结束
3. if的高级特性

双圆括号(( )):表示数学表达式
在判断命令中只允许在比较中进行简单的算术操作,而双圆括号提供更多的数学符号,而且在双圆括号里面的’>’,’<'号不需要转译

双方括号[[ ]]:表示高级字符串处理函数
双方括号中判断命令使用标准的字符串比较,还可以使用匹配模式,从而定义与字符串相匹配的正则表达式。

双括号的作用:

在shell中,[ $a != 1 || $b = 2 ]是不允许的,要用[ $a != 1 ] || [ $b = 2 ],而双括号就可以解决这个问题,[[ $a != 1 || $b = 2 ]]。又比如
在这里插入图片描述

4. if语句的比较与测试
[ ]表示条件测试。注意这里的空格很重要。要注意在'['后面和']'前面都必须要有空格
在shell中,then和fi是分开的语句。如果要在同一行里面输入,则需要用分号将他们隔开。
注意if判断中对于变量的处理,需要加引号,以免一些不必要的错误。没有加双引号会在一些含空格等的字符串变量判断的时候产生错误。比如[ -n "$var" ]如果var为空会出错
判断是不支持浮点值的
如果只单独使用>或者<号,系统会认为是输出或者输入重定向,虽然结果显示正确,但是其实是错误的,因此要对这些符号进行转意
在默认中,运行if语句中的命令所产生的错误信息仍然出现在脚本的输出结果中
条件测试的表达式:
    [ expression ]  括号两端必须要有空格
    [[ expression ]] 括号两端必须要有空格
    test expression
组合测试条件:
 -a: and
 -o: or
  !: 非
整数比较:
-eq 测试两个整数是否相等
-ne 测试两个整数是否不等
-gt 测试一个数是否大于另一个数
-lt 测试一个数是否小于另一个数
-ge 大于或等于
-le 小于或等于
命令间的逻辑关系
逻辑与:&&
        第一个条件为假 第二个条件不用在判断,最总结果已经有
        第一个条件为真,第二个条件必须得判断
逻辑或:||
字符串比较:
 == 等于  两边要有空格
 != 不等
 >  大于
 <  小于
文件类型测试:
-z string 测试指定字符是否为空,空着真,非空为假
-n string 测试指定字符串是否为不空,空为假 非空为真
-e FILE 测试文件是否存在
-f file 测试文件是否为普通文件
-d file 测试指定路径是否为目录
-r file 测试文件对当前用户是否可读
-w file 测试文件对当前用户是否可写
-x file 测试文件对当前用户是都可执行
-z  是否为空  为空则为真
-a  是否不空
5. 使用if语句编写一个checkfiletype.sh脚本, 检测文件是否存在, 是否是目, 软链接或普通文件, 当输入exit(不区分大小写),退出脚本程序,输出bye~

在这里插入图片描述
编辑checkfiletype.sh脚本文件
在这里插入图片描述
在这里插入图片描述

否则,输出该文件不存在在这里插入图片描述

可以看到,当输入EXIT和exit时,退出脚本,并且输出bye~
当输入/mnt, 显示是一个目录
当输入/etc/passwd, 显示是一个普通文件
当输入/etc/system-release, 可以看到, 这是一个系统的软链接

在这里插入图片描述

6. 使用if语句编写一个filectl.sh脚本, 当用户输入-a 文件名, 自动创建文件;当用户输入-p 文件名时, 将文件复制到/mnt下;当用户输入-d 文件名时, 删除文件;当用户输入的不是adp, 提示用户需要输入-a|-d|-p

编辑filectrl.sh文件
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

运行脚本,脚本后加-a, 文件名,如果文件名存在,则显示文件已存在,ls可以查看到/mnt下有file文件
在这里插入图片描述
运行脚本,脚本名称后加-d, file,可以看到,file文件已经删除,ls可以看到,file文件已经不存在了
在这里插入图片描述
运行脚本,脚本名称后添加fileyy文件,可以看到,fileyy已经成功建立
在这里插入图片描述
运行脚本,脚本名称后加-f, 可以看到,提示请在脚本后输入-d|-a|-p
在这里插入图片描述
运行脚本,只写脚本名称,可以看到,提示请在脚本后输入-d|-a|-p
在这里插入图片描述
运行脚本,在脚本名称后加-p, fileyy, 可以看到,显示在复制过程中,已经存在相同的文件
在这里插入图片描述
运行脚本,在脚本名称后加-d, file, 可以看到,不存在的文件是无法删除的,报错:文件不存在
在这里插入图片描述

使用sh -x可以看到脚本的执行过程,-p执行了两次
在这里插入图片描述
-d执行了三次,这是顺序机制,效率较低,每次都得从头开始匹配条件,因此引入点名机制
在这里插入图片描述

5. case语句——点名机制

举个简单的例子,查看case语句的执行
编辑脚本测试文件case.sh
在这里插入图片描述
编辑case.sh脚本文件测试,脚本后什么都不接报错
在这里插入图片描述
执行脚本测试,脚本后跟westos输出linux; 脚本后跟linux输出westos
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值