shell可以重复地执行特定的指令,直到特定的条件被满足为止。这重复执行的一组命令就叫做循环。
每一个循环都具有以下特点:
- 首先,循环条件中使用的变量必须是已初始化的,然后在循环中开始执行。
- 在每一次循环开始时进行一次测试。
- 重复的执行一个代码块
7.1 for循环
7.1.1 for循环语法
for循环的基本语法:
for VAR in item1 item2 ... item do command1 command2 ... ... commandN done
for循环变量的内容的语法:
for VAR in $fileNames do command1 command2 ... ... commandN done
for循环命令替换的语法:
for VAR in $(Linux-command-name) #或者使用: for VAR in `Linux-command-name` do command1 command2 ... ... commandN done
for循环还有三项表达式语法,这种语法与C语言中常见for循环使用方法相同。
for循环三项表达式语法:
for (( EXP1; EXP2; EXP3 )) do command1 command2 ... ... commandN done
上述语法以三项参数循环控制表达式为特征,它由一个初始化式(EXP1)、循环测试或条件(EXP2)和一个计算表达式(EXP3)组成。
在for循环中,每次指定列表中的(iterm1…itermN)新值被赋给变量VAR后,for循环都会执行一次,它将重复运行‘do’和‘done’之间的所有语句,直到条件不满足时为止。这些列表或数值通常是:
- 字符串
- 数字
- 命令行
- 参数
- 文件名
- Linux命令的输出
我们来看一个简单的for循环的脚本:
#!/bin/bash for i in 1 2 3 # 从1~3循环 do echo "The for loop is run $i times" done
接下来看一个字符串的循环示例:
#! /bin/bash for linux in Debin Redhat Suse Fedora do echo "The OS is : $linux" done
使用变量内容的for循环示例:
#! /bin/bash filenames="/etc/yp.conf /etc/nsswitch.sh /etc/auto.master /etc/resolv.conf" # 文件名以空格分隔 for file in $filenames do [ -f $file ] && echo "The file $file was found" || echo "*** Error : The file $file was missing. ***" done
使用命令替换的for循环实例:
#! /bin/bash echo "Printing file list in /tmp/directory:" for file in 'ls /tmp/*' do echo $file done
7.1.2 嵌套for循环语句
嵌套循环的意思即是在循环中循环。下面我们看一个简单的嵌套for循环的实例:
#! /bin/bash for (( i = 0; i < 3; i++ )) do for(( j = 0; j < 5; j++ )) do echo -n "* " done echo "" done<