adb脚本选择语句_带你了解企业是如何编写脚本的-if语句判断:if的多种姿势

#Linux# #shell编程# #编程##shell#

在上一篇:带你了解企业是如何编写脚本的-入门篇:抛弃vi,拥抱echo 中,我们知道了可以通过echo这个工具可以写入和打印一些信息,打印完成之后就直接进行下一步,一切看起来是那么的顺利。

但是,你的脚本真的能那么顺利吗?我们要如何正确的完成目标?这时候就需要我们的if判断上场了!

本文以bash语法进行演示

Shell条件选择

Shell和其它编程语言一样,支持选择结构,并且有两种形式,分别是 if else 语句和 case in 语句。在这里我们就先从最简单的if语句开始学习。

53ac4b9cb485da1e2d96906409ef8ad8.png

编程语言

简单案例

if中文翻译过来就是:如果 。 所以if的应用场景主要在于确定某个变量是否等于预设值,如果等于某个预设值则执行哪些操作,例如下面的案例:

#!/bin/bash##if判断echo -e "请输入一个菜单的序号:[1]查询本机IP地址[2]查询本机主机名"read showif [[ "$show" -eq '1' ]];thenhostname -Ielif [[ "$show" -eq "2" ]];thenhostnamefi 
6bf17b29afc579bfb35892b7c452da33.png

执行结果

然后可以看到,此时的程序可以根据我的选择去执行对应的操作,这就是if语句的一个应用场景(只建议条件少的情况使用if)

语法解析

看完了案例,我们就可以回到最基础的语法这里。每个编程语言都有不同的语法,而学习编程最基础的其实就是学习语法,只有掌握了语法你才能更高效的学习。

下面我们来对比一下Python和Shell的if语法:

Shell编程的if基本语法

在Shell编程中,if语句最简单的结构就是:

if [[ "判断" ]];then"操作"fi

而这个最简单同时也意味着这是必不可少的,例如下面这个案例:

17e7da5fc5977fe9ebe0827ddf4fd4dc.png

简单案例

如果我把结尾的fi去掉会是怎样的呢?

ebc5a340250acff4d49e474f02a5f6a7.png

去掉fi

或者去掉:then

7c4c5c43d06ad4b050d7816839eb1b08.png

去掉then

可以看到,无论去掉哪一部分都是报错的,但是可以这样修改:

9bf2a46cd3fe69985af70847ef15d0cb.png

改为单方括号

175e0ac13bfe28f93724279d4a91f3b0.png

删除变量双引号

可以看到,此时虽然修改了一些地方,但是运行起来还是没有问题的。

Shell脚本的if判断语句格式

在Shell脚本中,其实对编程格式是非常的随意的,不像Python那样严格的限制缩进,例如:

0f79d54385ae634973bae113628b2f77.png

执行命令与判断在同一行

da38ff6e69479b2d49df491e8f66fa3a.png

全部在同一行(需要加一个分号 ; )

虽然说这样都没有问题,但是我个人还是建议参照Python的语法要求来编写,因为按照Python那样的格式要求的话看起来会比较方便,尤其是判断条件多的时候就不会显得乱七八糟的。

Shell编程的if扩展语法

在实际的场景中,我们不可能永远只判断一个条件,而且实际条件也不可能全部都在预期之中,所以下面分别介绍多条件与预期之外的场景语法:

多条件场景

多条件场景也就是说在实际的结果中,会存在很多种不同的结果,然后每种结果都在预期内

语法如下:

if [[ "$变量" -eq '1值' ]];thenhostname -Ielif [[ "$变量" -eq "2值" ]];thenhostname elif [[ "$变量" -eq "N值" ]];thenfi

也就是说,有多少个判断添加就加多少个:

 elif [[ "$变量" -eq "N值" ]];then

只需要最后有fi结尾即可,但是个人建议如果不考虑预期之外的情况,且判断添加多的话使用case语句会更简洁!

案例如下:

a9b65df42e109a3786795bc794c28885.png

预期之内

这样的写法本人非常不推荐,无论是易用性还是严谨性,都不建议使用这种写法

多条件+预期之外(默认设置)

相对于上一个场景而言,明显有时候只考虑预期之内的结果是不明智的,所以我们就需要考虑预期之外,也就是:else分支

语法如下:

if [[ "$变量" -eq '1值' ]];thenhostname -Ielif [[ "$变量" -eq "2值" ]];thenhostnameelif [[ "$变量" -eq "N值" ]];then hostelse    echo '选择错误'exit 1fi

else常用于设置:默认值,例如拿上面的案例来改进:

29feaf29acfe933e3ee3cbd188c26d3a.png

通过else设置默认值

从结果中可以看到,即使我乱选择或者不选择,程序都会帮我选择一个默认值,这种一般可以用在不是非常重要的选择但是也不能空白的场景。

相对于上一个语法而言,这种写法就考虑更加全面。在一些非常严谨的场景下,我们还还可以通过else设置选择错误就退出的一种处理机制(更加严谨)

695d8c98729dc9d4fd9c051975f7135e.png

必须选择

主要应用场景

状态检查

虽然说if是条件分支、判断语句,但是对于选择分支而言,其实case更适合做这行,而if更多的应用场景则是判断执行状态,例如:

23896e1ef4340c2c88c7b4ad5b67dafc.png
b028273c40abb374e5b27b829d469a9d.png

文件/文件夹判断

由于在脚本中还会考虑对某些文件夹/文件进行操作,所以我们需要正确的判断想要操作/编辑的文件/文件夹是否存在才能更好的去实现最终目标,所以这时候就可以使用if判断文件或者文件夹是否存在了

ef1ddaa4eda5427b0c9c1706f3e74d0f.png

判断文件是否存在

c937b651c40b9e029c339fb88c9470aa.png

判断文件夹是否存在

你认为if还可以在哪些场景更适合使用或者哪些工具更适合替代以上场景呢?可以在评论区一起讨论一下。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值