循环是一种强大的编程工具,它能够重复执行一组命令。Linux中shell脚本支持while循环、for循环、until循环、select循环,据情况使用不同的循环。根据情况开始使用适当的循环。while和for循环在大多数其他编程语言中都是可用的,如C、c++和Java等。

1、while循环

while循环允许重复执行一组命令,直到出现某种情况,不满足条件的时候结束循环。

语法:

while command
do
如果command为true,将执行的语句
done 

 注意:如果结果值为true,则执行给定的语句。如果commandfalse,则不会执行任何语句,程序将跳转到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是变量名,item1itemN是由空格(单词)分隔的字符序列。每次执行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

推荐文档

相关文档

大家感兴趣的内容

随机列表