在这章节中,我们会讨论Unix系统里面的Shell循环。循环就是一个可以让你重复执行某一个命令的编程方法。在这章节中,我们会介绍可用于Shell程序员的以下类型的循环 -

while循环

for循环

until循环

select循环

你将会在不同情况下使用最适当的循环方法。例如,while循环执行一个命令直到给的条件保持为真;until循环执行一个命令知道条件为真。

一旦你有了良好的编程实践,你将获得专业知识,从而在不同的情况下使用适当的循环方法。在这里,while和for循环普遍于其它的编程语言,比如C,C++和PERL等等。

while循环

while循环使您能够重复执行一组命令,直到条件不为真。while循环通常用于反复操作变量的值。

句法

while command

do

Statement(s) to be executed if command is true

done

上面的那个句法,程序会先计算 command 语句的结果,如果返回的结果是 true,则会执行 statement(s) 里面的程序。如果 command 返回的结果是 false,则不执行任何语句。并且程序将跳至 done 语句之后的下一行。

例子

下面是一个简单的示例,使用 while 循环打印数字 0 到 9

#!/bin/sh

a=0

while [ $a -lt 10 ]

do

echo $a

a=`expr $a + 1`

done

上面的程序执行后,将收到以下结果:

0

1

2

3

4

5

6

7

8

9

变量 a 的初始值为 0,每次执行此循环时,都会检查变量 a 的值,以查看其值是否小于 10。如果 a 的值小于 10,就显示 a 的当前值,然后将 a 递增 1。

for 循环

for 循环对项目列表进行操作,它重复执行列表中的每一个项目的命令集。

句法

for var in word1 word2 ... wordN

do

Statement(s) to be executed for every word.

done

上面的代码,var 是变量的名称,而 word1 到 wordN 是由空格(单词)分隔的字符序列。每次执行 for 循环时,变量 var 的值将设置为单词列表 word1 至 wordN 中的下一个单词。

示例

下面是一个简单的例子,给定一个数字列表,使用 for 循环遍历 −

#!/bin/sh

for var in 0 1 2 3 4 5 6 7 8 9

do

echo $var

done

执行脚本后,您将获得以下结果 −

0

1

2

3

4

5

6

7

8

9

下面的例子将显示所有以 .bash 开头的文件,此段脚本对你的家目录同样有效。我们从我的根目录执行这个脚本 −

#!/bin/sh

for FILE in $HOME/.bash*

do

echo $FILE

done

以上脚本会产生以下结果 −

/root/.bash_history

/root/.bash_logout

/root/.bash_profile

/root/.bashrc

until 循环

while 循环非常适合在某些条件为真时需要执行一组命令的情况。有时则需要执行一组命令,直到条件为真为止。

语法

until command

do

Statement(s) to be executed until command is true

done

在这里, Shell 命令 被评估。如果结果值为 false ,则执行给定的 语句 。 如果 命令 结果值是 true ,则不会执行任何语句,程序将跳到完成语句之后的下一行。

示例

这里有一个简单的例子,它使用 until 循环来显示零到九的数字 −

#!/bin/sh

a=0

until [ ! $a -lt 10 ]

do

echo $a

a=`expr $a + 1`

done

脚本执行后,您将获得以下结果 −

0

1

2

3

4

5

6

7

8

9

select 循环

select 循环提供了一种简单的方法来创建一个编号菜单,用户可以从中选择选项。这种场合适用于当您需要用户从选择列表中选择一个或多个项时。

语法

select var in word1 word2 ... wordN

do

Statement(s) to be executed for every word.

done

这里 var 是变量的名称, word1 到 wordN 是由空格(或者单词)分隔的字符序列。每次执行 for 循环时,变量 var 的值都会被设置为单词列表中的下一个单词,即从 word1 到 wordN 。

对于每个选择,将在循环中执行一组命令。 select 循环是在 ksh 中引入的,已被 bash 兼容,但在 sh 环境中无效。

Example

这里有一个简单的例子,让用户选择一种饮料 −

#!/bin/ksh

select DRINK in tea cofee water juice appe all none

do

case $DRINK in

tea|cofee|water|all)

echo "Go to canteen"

;;

juice|appe)

echo "Available at home"

;;

none)

break

;;

*) echo "ERROR: Invalid selection"

;;

esac

done

由 select 循环呈现的菜单如下所示 −

$./test.sh

1) tea

2) cofee

3) water

4) juice

5) appe

6) all

7) none

#? juice

Available at home

#? none

$

您可以采用下面的方法通过更改变量 PS3 的值来更改 select 循环的提示信息 −

$PS3 = "Please make a selection => " ; export PS3

$./test.sh

1) tea

2) cofee

3) water

4) juice

5) appe

6) all

7) none

Please make a selection => juice

Available at home

Please make a selection => none

$

嵌套循环

所有循环都支持嵌套,这意味着您可以将一个循环放入另一个类似的循环或不同的循环中。只要您需要,嵌套层数可以任意的多。

下面是嵌套的 while 循环示例。其它循环可以基于编程需求以类似的方式嵌套 −

while 嵌套循环

可以使用 while 循环作为另一个 while 循环体的一部分。

语法

while command1 ; # 这是第一层循环,即外层循环

do

Statement(s) to be executed if command1 is true

while command2 ; # 这是第二层循环,即内层循环

do

Statement(s) to be executed if command2 is true

done

Statement(s) to be executed if command1 is true

done

示例

下面是嵌套循环的一个简单例子。让我们在循环中添加另一个您通常数到 9 的倒计数循环−

#!/bin/sh

a=0

while [ "$a" -lt 10 ] # 这是第一层循环

do

b="$a"

while [ "$b" -ge 0 ] # 这是第二层循环

do

echo -n "$b "

b=`expr $b - 1`

done

echo

a=`expr $a + 1`

done

这将产生以下结果。 需要注意的是 echo-n 在这里的用处是什么。 这里的 -n 选项是让 echo 避免换行。

0

1 0

2 1 0

3 2 1 0

4 3 2 1 0

5 4 3 2 1 0

6 5 4 3 2 1 0

7 6 5 4 3 2 1 0

8 7 6 5 4 3 2 1 0

9 8 7 6 5 4 3 2 1 0

linux脚本嵌套循环,Linux Shell 脚本:循环语句相关推荐

  1. Linux命令行与shell脚本编程大全:第2版

    <Linux命令行与shell脚本编程大全:第2版> 基本信息 作者: (美)布卢姆(Blum,R.) 布雷斯纳汉(Bresnahan.C.) [作译者介绍] 译者: 武海峰 丛书名: 图 ...

  2. 《Linux命令行与Shell脚本编程大全第2版.布卢姆》pdf

    下载地址:网盘下载 内容简介  · · · · · · 本书是一本关于Linux 命令行与shell 脚本编程的全面教程.全书分为四部分:第一部分介绍Linuxshell 命令行:第二部分介绍shel ...

  3. 《Linux命令行与shell脚本大全》笔记

    初识Linux Shell 什么是Linux Linux可划分为以下四部分: Linux内核 GNU工具 图形化桌面环境 应用软件 深入探究Linux内核 内核主要负责以下四种功能: 系统内存管理 软 ...

  4. linux 命令行与shell脚本编程大全

    linux 命令行与shell脚本编程大全 第一章 Linux LiveCD就是从cd读取的系统,由于没法将数据写入到cd,所以一旦重启,之前操作过后的一切数据都会丢失. 第二章 第三章 1.man手 ...

  5. Linux从入门到精通系列之SHELL编程循环语句语法及实例详解(forwhileuntil)

    前言 Shell作为一种脚本编程语言,同样了包含了循环,分支等其他程序控制结构,从而能够轻松完成更加复杂.强大的功能.我们今天就来认识for.while.case语句的具体应用. 插个小广告吧,虽然我 ...

  6. linux脚本编写规则,shell脚本编写守则

    现在centos7中使用的是bash软件,通过以下命令可以查看bash版本: [root@localhost ~]# cat /etc/redhat-release #查看系统的版本 CentOS L ...

  7. 《Linux命令行与shell脚本编程大全》笔记一

    第一章 初始 Linux shell Linux内核主要四种功能: 1.系统内存管理 2.软件程序管理 3.硬件设备管理 4.文件系统管理 shell:交互工具. 第三章 基本的bash shell ...

  8. 【Linux】《Linux命令行与shell脚本编程大全 (第4版) 》笔记-汇总 ( Chapter17-ChapterB )

    十七.创建函数 bash shell 提供了用户自定义函数功能,可以将 shell 脚本代码放入函数中封装起来. 函数是一个脚本代码块,你可以为其命名并在脚本中的任何位置重用它.每当需要在脚本中使用该 ...

  9. 【2018深信服 醒狮计划】《Linux命令行与Shell脚本编程大全》学习笔记

    2018深信服"醒狮计划"笔记 第3周(5.02-5.13) 课程 必修 选修 基本要求 Shell编程 <Linux命令行与Shell脚本编程大全> <Perl ...

  10. linux脚本求命令行上整数和,《Linux命令行与shell脚本编程大全》 第二十二章 学习札记...

    <Linux命令行与shell脚本编程大全> 第二十二章 学习笔记 第二十二章:使用其他shell 什么是dash shell Debian的dash shell是ash shell的直系 ...

最新文章

  1. Go 分布式学习利器(19)-- Go并发编程 之 CSP(communicating sequential processes) 机制
  2. linux系统中删除文件夹
  3. Extmail + Postfix on Debian5
  4. 用子函数的方法求一个3*4的数组的转置数组
  5. 由于检索用户的本地应用程序数据路径时出错,导致无法生成 SQL Server 的用户实例...
  6. redis api-String
  7. 求数组非连续子序列的最大和
  8. 完数c++语言程序_C语言经典100题(19)
  9. 实现类似黑客帝国的字符流特效屏保
  10. Newtonsoft.Json基本使用
  11. [搜片神器]使用C#实现DHT磁力搜索的BT种子后端管理程序+数据库设计(开源)
  12. 155页4万字智慧交通电子警察系统平台解决方案
  13. 新视野大学英语第三版3课后翻译
  14. 发热内衣的优势在哪里
  15. Enter键绑定按钮或方法
  16. 本地自签https证书
  17. 华为数通HCIA学习笔记之OSI参考模型TCP/IP模型
  18. USACO美国信息学奥赛竞赛12月份开赛,中国学生备赛指南
  19. n行数字组成的数字三角形详解
  20. 2022 年全球重大经济事件盘点( I )

热门文章

  1. Python爬虫——爬取知乎(实践)
  2. 抖音知乎推文项目怎么申请关键词
  3. matlab阵列天线波束扫描,Matlab在相控阵天线中的应用.pdf
  4. 数据治理解决方案概述
  5. 单相逆变器第三课、系统结构分析梳理
  6. 《51单片机》用STC-ISP-15XX-V6.85F烧录程序的步骤
  7. py-21-Android
  8. 如何确定windows弹出的广告窗口是哪个程序导致并找出来
  9. Movavi PDF Editor 适用于Mac的多功能PDF编辑器
  10. Linux 这些工具堪称神器!你用过哪个?