1、while循环
while
循环允许重复执行一组命令,直到出现某种情况,不满足条件的时候结束循环。
语法:
while command
do
如果command为true,将执行的语句
done
注意:如果结果值为true
,则执行给定的语句。如果command
为false
,则不会执行任何语句,程序将跳转到done
语句之后的下一行。
例如,
#!/bin/bash x=1 while [ $x -le 5 ] do echo "x = $x" x=$(( $x + 1 )) done
输出:
x = 1
x = 2
x = 3
x = 4
x = 5
每次循环输出变量x
的值, x=$(( $x + 1 ))
是将变理x
的值加1
,直到不满足条件循环结束。
2、for循环
for
循环对列表中元素进行操作。它为列表中的每个项元素重复一组命令。
语法:
for var in item1 item2 ... itemN
do
为每个元素执行的语句
done
注意:上面的var
是变量名,item1
到itemN
是由空格(单词)分隔的字符序列。每次执行for
循环时,变量var
的值被设置为item列表中的下一个单词,从Item1到itemN。
例如,
#!/bin/bash for((i=1;i<=10;i++)); do echo $(expr $i \* 3 + 1); done
输出:
4
7
10
13
16
19
22
25
28
31
3、until循环
until
命令和while
命令类似,while
能实现的脚本until
同样也可以实现,区别是while
循环在条件为true
时继续执行循环而until
则在条件为false
时执行循环。
语法:
until command
do
在命令为true之前执行的语句
done
注意:如果结果值为false
,则执行给定的语句。如果该命令为true
,则不会执行任何语句,并且程序跳转到done
语句之后的下一行。
例如,
#!/bin/bash i=0 until [[ "$i" -gt 5 ]] #大于5 do let "square=i*i" echo "$i * $i = $square" let "i++" done
输出:
0 * 0 = 0
1 * 1 = 1
2 * 2 = 4
3 * 3 = 9
4 * 4 = 16
5 * 5 = 25
4、select循环
select
循环提供了一种简单的方法来创建一个编号菜单,用户可以从中选择选项。当需要要求用户从选项列表中选择一个或多个项目时,它非常有用。
语法:
select var in item1 item2 ... itemN
do
为每个item执行的语句。
done
注意:上面的var
是变量名,item1到itemN是由空格(单词)分隔的字符序列。每次执行select
循环时,变量var
的值被设置为单词列表中的下一个单词,从item1到itemN。对于每个select
,将在循环中执行一组命令。这个循环在ksh
中被引入,已被改编到bash
。在sh中不支持。
例如,
#!/usr/bin/bash PS3="Select a program to exectue: " select program in 'ls -F' pwd date do $program done (The Command Line) Select a program to exectue: 2 1) ls -F 2) pwd 3) date # /home/yang # 在执行脚本的时候,PS3里面的字符串会显示在终端的底部
输出:
$ bash select.sh
1) ls -F
2) pwd
3) date
Select a program to exectue: 2
/root
5、嵌套循环
所有循环都支持嵌套概念,可以将一个循环放入另一个类似或不同的循环中。根据需求,这种嵌套可以达到无限次。
例如,
#!/bin/bash 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
输出:
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