下载
第18章 控制流结构
所有功能脚本必须有能力进行判断,也必须有能力基于一定条件处理相关命令。本章讲
述这方面的功能,在脚本中创建和应用控制结构。
本章内容有:
• 退出状态。
• while、f o r和until loops循环。
• if then else语句。
• 脚本中动作。
• 菜单。
18.1 退出状态
在书写正确脚本前,大概讲一下退出状态。任何命令进行时都将返回一个退出状态。如
果要观察其退出状态,使用最后状态命令:
$ echo $?
主要有4种退出状态。前面已经讲到了两种,即最后命令退出状态 $ ?和控制次序命令($ $、
| | )。其余两种是处理 s h e l l脚本或s h e l l退出及相应退出状态或函数返回码。在第 1 9章讲到函数
时,也将提到其返回码。
要退出当前进程,s h e l l提供命令e x i t ,一般格式为:
exit n
其中,n为一数字。
如果只在命令提示符下键入 e x i t ,假定没有在当前状态创建另一个 s h e l l,将退出当前s h e l l。
如果在脚本中键入e x i t ,s h e l l将试图(通常是这样)返回上一个命令返回值。有许多退出脚本
值,但其中相对于脚本和一般系统命令最重要的有两种,即:
退出状态0 退出成功,无错误。
退出状态1 退出失败,某处有错误。
可以在s h e l l 脚本中加入自己的退出状态(它将退出脚本)。本书鼓励这样做,因为另一个
s h e l l脚本或返回函数可能要从 s h e l l脚本中抽取退出脚本。另外,相信加入脚本本身的退出脚
本值是一种好的编程习惯。
如果愿意,用户可以在一个用户输入错误后或一个不可覆盖错误后或正常地处理结束后
退出脚本。
注意 从现在起,本书所有脚本都将加入注释行。注释行将解释脚本具体含义,帮助用户
理解脚本。可以在任何地方加入注释行,因为其本身被解释器忽略。注释行应以#开头。
18.2 控制结构
几乎所有的脚本里都有某种流控制结构,很少有例外。流控制是什么?假定有一个脚本