赞
踩
#Linux# #shell编程# #编程##shell#
在上一篇:带你了解企业是如何编写脚本的-入门篇:抛弃vi,拥抱echo 中,我们知道了可以通过echo这个工具可以写入和打印一些信息,打印完成之后就直接进行下一步,一切看起来是那么的顺利。
但是,你的脚本真的能那么顺利吗?我们要如何正确的完成目标?这时候就需要我们的if判断上场了!
本文以bash语法进行演示
Shell和其它编程语言一样,支持选择结构,并且有两种形式,分别是 if else 语句和 case in 语句。在这里我们就先从最简单的if语句开始学习。
if中文翻译过来就是:如果 。 所以if的应用场景主要在于确定某个变量是否等于预设值,如果等于某个预设值则执行哪些操作,例如下面的案例:
#!/bin/bash##if判断echo -e "请输入一个菜单的序号:[1]查询本机IP地址[2]查询本机主机名"read showif [[ "$show" -eq '1' ]];thenhostname -Ielif [[ "$show" -eq "2" ]];thenhostnamefi
然后可以看到,此时的程序可以根据我的选择去执行对应的操作,这就是if语句的一个应用场景(只建议条件少的情况使用if)
看完了案例,我们就可以回到最基础的语法这里。每个编程语言都有不同的语法,而学习编程最基础的其实就是学习语法,只有掌握了语法你才能更高效的学习。
下面我们来对比一下Python和Shell的if语法:
在Shell编程中,if语句最简单的结构就是:
if [[ "判断" ]];then"操作"fi
而这个最简单同时也意味着这是必不可少的,例如下面这个案例:
如果我把结尾的fi去掉会是怎样的呢?
或者去掉:then
可以看到,无论去掉哪一部分都是报错的,但是可以这样修改:
可以看到,此时虽然修改了一些地方,但是运行起来还是没有问题的。
在Shell脚本中,其实对编程格式是非常的随意的,不像Python那样严格的限制缩进,例如:
虽然说这样都没有问题,但是我个人还是建议参照Python的语法要求来编写,因为按照Python那样的格式要求的话看起来会比较方便,尤其是判断条件多的时候就不会显得乱七八糟的。
在实际的场景中,我们不可能永远只判断一个条件,而且实际条件也不可能全部都在预期之中,所以下面分别介绍多条件与预期之外的场景语法:
多条件场景也就是说在实际的结果中,会存在很多种不同的结果,然后每种结果都在预期内
语法如下:
if [[ "$变量" -eq '1值' ]];thenhostname -Ielif [[ "$变量" -eq "2值" ]];thenhostname elif [[ "$变量" -eq "N值" ]];thenfi
也就是说,有多少个判断添加就加多少个:
elif [[ "$变量" -eq "N值" ]];then
只需要最后有fi结尾即可,但是个人建议如果不考虑预期之外的情况,且判断添加多的话使用case语句会更简洁!
案例如下:
这样的写法本人非常不推荐,无论是易用性还是严谨性,都不建议使用这种写法
相对于上一个场景而言,明显有时候只考虑预期之内的结果是不明智的,所以我们就需要考虑预期之外,也就是:else分支
语法如下:
if [[ "$变量" -eq '1值' ]];thenhostname -Ielif [[ "$变量" -eq "2值" ]];thenhostnameelif [[ "$变量" -eq "N值" ]];then hostelse echo '选择错误'exit 1fi
else常用于设置:默认值,例如拿上面的案例来改进:
从结果中可以看到,即使我乱选择或者不选择,程序都会帮我选择一个默认值,这种一般可以用在不是非常重要的选择但是也不能空白的场景。
相对于上一个语法而言,这种写法就考虑更加全面。在一些非常严谨的场景下,我们还还可以通过else设置选择错误就退出的一种处理机制(更加严谨)
虽然说if是条件分支、判断语句,但是对于选择分支而言,其实case更适合做这行,而if更多的应用场景则是判断执行状态,例如:
由于在脚本中还会考虑对某些文件夹/文件进行操作,所以我们需要正确的判断想要操作/编辑的文件/文件夹是否存在才能更好的去实现最终目标,所以这时候就可以使用if判断文件或者文件夹是否存在了
你认为if还可以在哪些场景更适合使用或者哪些工具更适合替代以上场景呢?可以在评论区一起讨论一下。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。