Shell脚本学习笔记——语法之条件测试(2)

在上一篇博客中,我们讲述了一些条件测试最基本的方法。但是,上篇博客的若干条件判断命令,只能判断出条件的真假,但在实际的应用中,判断出真假只是第一步,我们还要根据判断结果来进行语句分流。

和C语言类似,在Shell中用if、then、elif、else、fi这几条命令实现分支控制。这种流程控制语句本质上也是由若干条Shell命令组成的。

我们先来看一个例子:

Shell脚本学习笔记——语法之条件测试(2)_第1张图片

这段代码是判断标准输入是否为字符串“hello”,若是则输出“hello...”;若不是则什么也不输出。

如果两条命令写在同一行则需要用 ;号隔开,一行只写一条命令就不需要写 ;号了。另外,then后面有换行,但这条命令没有写完,Shell会自动续行把下一行接在then后面当做一条命令处理。

和 [ 命令一样,要注意命令和各参数之间必须用空格隔开。所以上面这段代码还可以写为:

Shell脚本学习笔记——语法之条件测试(2)_第2张图片


  • 条件嵌套

Shell脚本学习笔记——语法之条件测试(2)_第3张图片

if命令的参数组成一条子命令,若该子命令的退出码为0(表示真),则执行then后面的子命令;若退出码非0(表示假),则执行elif、else或者fi后面的子命令。if后面的子命令通常是测试命令,但也可以是其他命令。

这也说明,if的子命令除了 [ 和test命令,还可以放其他命令,只要该命令的退出码为0、1来表示执行结果。

Shell脚本中没有{ }括号,所以用fi表示if语句块的结束。


  • 空代码块

Shell脚本学习笔记——语法之条件测试(2)_第4张图片

如果在代码块中,出现了空语句情况,什么都不写,Shell会直接报错。

是一个特殊的命令,称为空命令,该命令不做任何事,但是退出码永远为真。所以,我们就可以用 : 来解决上面的问题。

Shell脚本学习笔记——语法之条件测试(2)_第5张图片

当然,也可以用true / false命令替代 : ,这样就不会报错了。


  • &&和 ||

此外,Shell还提供了&&和||语法。

Shell脚本学习笔记——语法之条件测试(2)_第6张图片

&&相当于“if...then...”。

Shell脚本学习笔记——语法之条件测试(2)_第7张图片

|| 相当于“if not...then...”。

&&和||用于连接两个命令,而-a和-o仅用于在测试表达式中连接两个测试条件。

Shell这里的{ }中包含的语句会在当前Shell进程中进行执行;而( )中包含的语句会创建新的Shell进程执行。


  • case/esac

case命令可类比于C语言的switch/case语句,esac表示case语句块的结束。C语言中的case只能匹配整型或字符型常量表达式,而Shell脚本中的case可以匹配字符串和Wildcard,每个匹配分支可以有若干条命令,末尾必须以 ;; 结束,执行时找到第一个匹配的分支并执行相应的命令,然后直接跳到esac之后,不需要像C语言一样用break跳出。

Shell脚本学习笔记——语法之条件测试(2)_第8张图片

还有一种情况,如果当有start或者-s选项时,输出“start...”这种逻辑时,就用该采取下面的这种写法:

Shell脚本学习笔记——语法之条件测试(2)_第9张图片

我们还可以举一个支持通配符的例子:

Shell脚本学习笔记——语法之条件测试(2)_第10张图片




你可能感兴趣的:(Shell脚本)