和其他高级程序设计语言一样, Shell提供了用来控制程序执行流程的命令,包括条件 分支和循环结构,用户可以用这些命令创建非常复杂的程序 92.1复合结构 bash中可以使用一对花括号“{}”或圆括号“(”将多条命令复合在一起,使他们在逻 辑上成为一条命令。 1.使用“{} 使用“{}”括起来的多条命令在逻辑上成为一条命令,一般出现在管道符“|”的左边 bash将从左到右依次执行各条命令,并将各自的输出结果汇集在一起,形成输出流,作为 “1”后面的输入 注意 {"之后要有一个空格,"”之前要有一个分号。 2.使用“O bash执行“O”中的命令时,会再创建一个新的子进程,然后由这个子进程去执行“O 中的命令。如果不想让命令运行时,对状态集合(如环境变量,位置参数等)的改变影响到 下面语句的执行,就应该把这些命令放在“O”中。 注意 ("之后的空格可有可无,")”之前的分号可有可无 实例9-6使用复合结构 922条件判断 1.if条件语句 无标题-记事本区 文件①)编辑)格式包)查看凹助 条件为真时的命令串 条件为真时的命令串 条件为假时的命令串 图920 if-then语句 图9-21i- then-else语句 if嵌套及elif-then结构
和其他高级程序设计语言一样,Shell 提供了用来控制程序执行流程的命令,包括条件 分支和循环结构,用户可以用这些命令创建非常复杂的程序。 9.2.1 复合结构 bash 中可以使用一对花括号“{}”或圆括号“()”将多条命令复合在一起,使他们在逻 辑上成为一条命令。 1.使用“{}” 使用“{}”括起来的多条命令在逻辑上成为一条命令,一般出现在管道符“|”的左边。 bash 将从左到右依次执行各条命令,并将各自的输出结果汇集在一起,形成输出流,作为 “|”后面的输入。 注意: “{”之后要有一个空格,“}”之前要有一个分号。 2.使用“()” bash 执行“()”中的命令时,会再创建一个新的子进程,然后由这个子进程去执行“()” 中的命令。如果不想让命令运行时,对状态集合(如环境变量,位置参数等)的改变影响到 下面语句的执行,就应该把这些命令放在“()”中。 注意: “(”之后的空格可有可无,“)”之前的分号可有可无。 实例 9-6 使用复合结构 9.2.2 条件判断 1.if 条件语句 图9-20 if-then语句 图9-21 if-then-else语句 2.if 嵌套及 elif-then 结构
式00时上无标回回冈 条件命令串 文件①)满辑q)格式 包叵区 查看①帮助QD 文伴①)编辑¢)格式@)查看)帮助Q 条件命令串 pattern2) 条件为真时的命令串 if条件命令串 命令串 其他命令串 图922i嵌套 9-23clse-i结构 图924case语句 3.case条件选择 实例97使用条件语句编写一个She程序 实例98使用case语句编写一个 Shell程序 Shell程序如图9-26所示,其功能为:首先进入 root/textfile目录,然后在屏幕上显示一 个选择菜单,等待用户输入数字[1-2],若输入正确,则显示相应文件的内容。保存文件,文 件名为 case. sh, case. sh的执行结果如图928所示 92.3循环控制 1.for循环 for循环对一个变量的可能值,都执行一个命令序列。赋给变量的几个数值既可以在程 序内以数值列表的形式提供,也可以在程序以外以位置参数的形式提供。for循环的一般格 式如图929所示 文件①)编辑)格式⑩查看①帮助0 变量名in参数1参数2…参数n n个命令行 图9-29for语句 实例9.9使用for语句编写一个shl程序 2. while和 until循环 B无标一记事本已区 文件Q)①)格式①查看①帮动QD 文件())格式@)查看D帮助0 i1条件命令串 n个命令行 个命令行 图932whle语句 图9-33untl语句 实例9-10使用 while语句编写一个 Shell程序
图9-22 if嵌套 图9-23 else-if结构 图9-24 case语句 3.case 条件选择 实例 9-7 使用 if 条件语句编写一个 Shell 程序 实例 9-8 使用 case 语句编写一个 Shell 程序 Shell 程序如图 9-26 所示,其功能为:首先进入/root/txtfile 目录,然后在屏幕上显示一 个选择菜单,等待用户输入数字[1-2],若输入正确,则显示相应文件的内容。保存文件,文 件名为 case.sh。case.sh 的执行结果如图 9-28 所示。 9.2.3 循环控制 1.for 循环 for 循环对一个变量的可能值,都执行一个命令序列。赋给变量的几个数值既可以在程 序内以数值列表的形式提供,也可以在程序以外以位置参数的形式提供。for 循环的一般格 式如图 9-29 所示。 图9-29 for语句 实例 9-9 使用 for 语句编写一 个 Shell 程序 2.while 和 until 循环 图9-32 while语句 图9-33 until语句 实例 9-10 使用 while 语句编写一个 Shell 程序
命实例9.1使用umtl语句编写一个Shel程序 while true until false n个命令行 n个命令行 图9-38tue无限循环图9-39 false无限循环 命实例912使用shif命令编写一个She程序 Shell i程序如图940所示,其功能为:若位置参数的个数为0,则退出,否则,求出各 位置参数之和。保存文件,文件名为 shift add. sh, shift add. sh的执行如图9-41所示。 bash定义了9个位置变量,$l~$9,但是这并不意味着在命令行只能使用9个参数,借 助shit命令可以访问多于9个的参数。 sht命令一次移动参数的个数由其所带的参数指定。如:shit3,一次移动3个参数 另外,如果当 shell程序处理完前9个命令行参数后,可以使用 shift9命令把$10移到$I。 924无条件控制 在 Shell编程中有时要用到无限循环的技巧,也就是说,这种循环一直执行碰到 break 或 continue命令。这种无限循环通常是使用true或 false命令开始的。 从循环中退出: break命令和 continue命令。 break:立即退出循环 continue:忽略本循环中的其他命令,继续下一次循环 Linux系统中的true总是零值,而 false则是非零值 使用 break和 continue语句只有放在do和done之间才有效。 实例9-13使用 break语句编写一个Shel程序 实例9-14使用 continue语句编写一个She程序
实例 9-11 使用 until 语句编写一 个 Shell 程序 图9-38 true无限循环 图9-39 false无限循环 实例 9-12 使用 shift 命令编写一个 Shell 程序 Shell 程序如图 9-40 所示,其功能为:若位置参数的个数为 0,则退出,否则,求出各 位置参数之和。保存文件,文件名为 shift_add.sh。shift_add.sh 的执行如图 9-41 所示。 bash 定义了 9 个位置变量,$1~$9,但是这并不意味着在命令行只能使用 9 个参数,借 助 shift 命令可以访问多于 9 个的参数。 shift 命令一次移动参数的个数由其所带的参数指定。如:shift 3,一次移动 3 个参数; 另外,如果当 shell 程序处理完前 9 个命令行参数后,可以使用 shift 9 命令把$10 移到$1。 9.2.4 无条件控制 在 Shell 编程中有时要用到无限循环的技巧,也就是说,这种循环一直执行碰到 break 或 continue 命令。这种无限循环通常是使用 true 或 false 命令开始的。 从循环中退出:break 命令和 continue 命令。 break:立即退出循环。 continue:忽略本循环中的其他命令,继续下一次循环。 注意: Linux 系统中的 true 总是零值,而 false 则是非零值。 使用 break 和 continue 语句只有放在 do 和 done 之间才有效。 实例 9-13 使用 break 语句编写一个 Shell 程序 实例 9-14 使用 continue 语句编写一个 Shell 程序