循环

来源:互联网 发布:手机淘宝购买成功截图 编辑:程序博客网 时间:2024/05/16 17:01

for循环


循环就是迭代(重复)一些命令的代码块, 如果循环控制条件不满足的话, 就结束循环.

for循环

for arg in [list]
do
  command(s)…
done

  在循环的每次执行中, arg 将顺序的访问 list 中列出的变量.

for arg in "$arg1" "$arg2" "$arg3" ... "$argN"# 在第一次循环中,  arg = $var1# 在第二次循环中,  arg = $var2# 在第三次循环中,  arg = $var3# ...# 在第N次循环中,   arg = $varN# 在[list]中的参数加上双引号是为了阻止单词分割.

  *list 中的参数允许包含通配符 .


例:一个简单的for循环.

#!/bin/bash# 列出所有的行星名称.for planet in Mercury Venus Earth Mars Jupiter Saturn Uranus Neptune Plutodo    echo $planetdoneechofor planet in "Mercury Venus Earth Mars Jupiter Saturn Uranus Neptune Pluto"#所有的行星名称被双引号封成了一个变量do    echo $planetdoneexit 0

每个 [list] 中的元素都可能包含多个参数. 在处理参数组时, 是非常有用的. 在这种情况下, 使用set命令来强制解析每个 [list] 中的元素, 并且将每个解析出来的部分都分配到一个位置参数中.


例: 每个[list]元素中都带有两个参数的for循环.

#!/bin/bash# 行星for planet in "Mercury 36" "Venus 67" "Earth 93" "Mars 142" "Jupiter 483"do    set -- $planet    # "--" 将防止$planet为空,或者是以一个破折号开头    echo "$1  $2,000,000, miles from the sun"done# set -- "$x" 就是把X的值返回给$.# set -- 是根据IFS,把值依次赋给 $1,$2,$3.exit 0

可以将一个变量放在for循环 的 [list] 位置上.


如果在for循环 的 [list] 中有通配符 (*和?), 那么将会发生通配(globbing), 也就是文件名扩展.


在一个for循环 中忽略 in [list] 部分的话, 将会使循环操作$@ – 从命令行传递给脚本的位置参数.


例: 在for循环中省略in [list]部分.

#!/bin/bash# 使用两种方式来调用这个脚本,一种带参数,另一种不带参数,并观察在这两种情况下,此脚本的行为.for ado    echo -n "$a "done# 省略'in list'部分,因此循环将会操作'$@'(包括空白的命令行参数列表).echoexit 0

也可以使用命令替换来产生for循环的[list] .


例:使用命令替换来产生for循环的[list]

#!/bin/bash# for-loopcmd.sh; [list]是由命令替换产生的.NUMBERS="9 7 3 8 37.53"for number in `echo $NUMBERS`  # for number in 9 7 3 8 37.53do    echo -n "$number "doneechoexit 0

有一种非常像C语言 for循环 的语法形式. 需要使用(()).


例: 一个C风格的for循环.

#!/bin/bash# 标准语法和c风格语法.# 标准语法.for a in 1 2 3 4 5 6 7 8 9 10do     echo -n "$n "doneecho# c风格语法做相同的事情.limit=10for ((a=1; a <= limit; a++))do    echo -n "$n "doneechoexit 0

while循环


这种结构在循环的开头判断条件是否满足, 如果条件一直满足, 那么就一直循环下去 (返回0作为退出状态码). 与for循环的区别是, while循环更适合在循环次数未知的情况下使用.
while [condition]
do
  command…
done


例: 一个简单的while循环.

#!/bin/bash# 一个简单的while循环var=0limit=10while [ "$var" -lt "$limit" ]do    echo -n "$var"    var=`expr $var + 1`    # var=$(($var+1))  也可以    # var=$((var + 1)) 也可以    # let "var += 1"   也可以doneechoexit 0

一个while循环 可以有多个判断条件. 但是只有最后一个才能够决定是否能够退出循环.


与for循环 一样, while循环 也可以通过(())来使用C风格的语法.

例:C风格的while循环.

#!/bin/bash# while-looopcmd.sh limit=10a=0# 标准语法while [ "$a" -lt "$limit" ]do    echo -n "$a "    let "a += 1"doneecho# C风格语法((a = 1))while (( a <= limit ))do     echo -n "$a "    ((a += 1))                 #let "a += 1"doneechoexit 0

until循环


这个结构在循环的顶部判断条件, 并且如果条件一直为false, 那么就一直循环下去. (与while循环相反).

until [condition-is-ture]
do
  command…
done


例:until循环

#!/bin/bash# until.shEND_CONDITION=enduntil [ "$var" = "$END_CONDITTON" ]#在循环的顶部进行条件判断.do    echo "Input variable #1 "    echo "$($END_CONDITION to exit)"    read var    echo "variable #1 = #var"    echdoneexit 0
原创粉丝点击