循环

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 Pluto
do
    echo $planet
done

echo

for planet in "Mercury Venus Earth Mars Jupiter Saturn Uranus Neptune Pluto"
#所有的行星名称被双引号封成了一个变量
do
    echo $planet
done

exit 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 a
do
    echo -n "$a "
done

# 省略'in list'部分,因此循环将会操作'$@'(包括空白的命令行参数列表).

echo

exit 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.53
do
    echo -n "$number "
done

echo

exit 0

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


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

#!/bin/bash
# 标准语法和c风格语法.

# 标准语法.
for a in 1 2 3 4 5 6 7 8 9 10
do 
    echo -n "$n "
done

echo

# c风格语法做相同的事情.
limit=10
for ((a=1; a <= limit; a++))
do
    echo -n "$n "
done

echo

exit 0

while循环


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


例: 一个简单的while循环.

#!/bin/bash
# 一个简单的while循环

var=0
limit=10

while [ "$var" -lt "$limit" ]
do
    echo -n "$var"
    var=`expr $var + 1`
    # var=$(($var+1))  也可以
    # var=$((var + 1)) 也可以
    # let "var += 1"   也可以
done

echo

exit 0

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


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

例:C风格的while循环.

#!/bin/bash
# while-looopcmd.sh 

limit=10
a=0

# 标准语法
while [ "$a" -lt "$limit" ]
do
    echo -n "$a "
    let "a += 1"
done

echo

# C风格语法
((a = 1))
while (( a <= limit ))
do 
    echo -n "$a "
    ((a += 1))                 #let "a += 1"
done

echo

exit 0

until循环


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

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


例:until循环

#!/bin/bash
# until.sh

END_CONDITION=end

until [ "$var" = "$END_CONDITTON" ]#在循环的顶部进行条件判断.
do
    echo "Input variable #1 "
    echo "$($END_CONDITION to exit)"
    read var
    echo "variable #1 = #var"
    ech
done

exit 0
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值