zoukankan      html  css  js  c++  java
  • 15 shell for循环

    除了 while 循环和 until 循环,Shell 脚本中还有for 循环,for 循环有两种使用形式:C语言风格的for循环Python语言风格的for in循环,两种形式的for循环用法对比如下:

    for循环用法实例1实例2
    C语言风格

    for((exp1; exp2; exp3))
    do
        statements
    done

    exp1/exp2/exp3分别代表初始化语句、判断条件、自增或自减,三者皆可省略,但是分号(;)必须保留

    它的运行过程为:

    • 1) 先执行 exp1。
    • 2) 再执行 exp2,如果它的判断结果是成立的,则执行循环体中的语句,否则结束整个 for 循环。
    • 3) 执行完循环体后再执行 exp3。
    • 4) 重复执行步骤 2) 和 3),直到 exp2 的判断结果不成立,就结束循环。
    • exp1 是一个初始化语句,仅在第一次循环时执行。
    1. #!/bin/bash
    2. sum=0
    3.  
    4. for ((i=1; i<=100; i++))
    5. do
    6. ((sum += i))
    7. done
    8.  
    9. echo "The sum is: $sum"

    运行结果:
    The sum is: 5050

    省略exp1的实例

    1. #!/bin/bash
    2. sum=0
    3. i=1
    4. for ((; i<=100; i++))
    5. do
    6. ((sum += i))
    7. done
    8.  
    9. echo "The sum is: $sum"

    可以看到,将i=1移到了 for 循环的外面

       
    1. #!/bin/bash
    2. sum=0
    3. for ((i=1; i++))
    4. do
    5. if(( i>100 )); then
    6. break
    7. fi
    8. ((sum += i))
    9. done
    10. echo "The sum is: $sum"

    省略 exp2,没有了判断条件,如果不作其他处理就会成为死循环,因此可以在循环体内部使用 break 关键字强制结束循环

    省略exp3的实例

    1. #!/bin/bash
    2. sum=0
    3. for ((i=1; i<=100))
    4. do
    5. ((sum += i))
    6. ((i++))
    7. done
    8. echo "The sum is: $sum"
    省略了 exp3,就不会修改 exp2 中的变量,这时可在循环体中加入修改变量的语句。
    Python语言风格

    for var in val_list
    do
        statements
    done

    1. var表示变量,val_list表示取值列表
    2. in val_list部分可以省略,省略后的效果类似于in $@

    它的运行过程为:

    • 1)每次循环都会从 val_list 中取出一个值赋给变量 var
    • 2)进入循环体,执行循环体中的 statements。
    • 3)直到取完 value_list 中的所有值,循环结束

    各种val_list:

    • 直接给出具体的值
    • 给出一个范围
    • 使用命令产生的结果
    • 使用通配符
    • 使用特殊变量

    在 in 关键字后面直接给出具体的值,多个值之间以空格分隔,比如1 2 3 4 5"abc" "390" "tom"

    1. #!/bin/bash
    2. sum=0
    3. for n in 4
    4. do
    5. echo $n
    6. ((sum+=n))
    7. done
    8. echo "The sum is "$sum

    运行结果:
    1
    2
    3
    4
    The sum is 10

    给出一个取值范围,格式为:{start..end},注意中间用两个点号相连,该形式只支持数字和字母

    1. #!/bin/bash
    2. sum=0
    3. for n in {1..100}
    4. do
    5. ((sum+=n))
    6. done
    7. echo $sum

    运行结果:
    5050

    输出从 A 到 z 之间的所有字符:

    1. #!/bin/bash
    2. for c in {A..z}
    3. do
    4. printf "%c" $c
    5. done

    输出结果:
    ABCDEFGHIJKLMNOPQRSTUVWXYZ

    []^_`abcdefghijklmnopqrstuvwxyz
    可以发现,Shell 是根据 ASCII 码表来输出的。

       

    使用命令的执行结果

    求偶数和

    1. #!/bin/bash
    2. sum=0
    3. for n in $(seq 100)
    4. do
    5. ((sum+=n))
    6. done
    7. echo $sum

    运行结果:
    2550

    seq 是一个 Linux 命令,用来产生某个范围内的整数,并且可以设置步长。

    seq 2 2 100表示从 2 开始,每次增加 2,到 100 结束。

    使用shell通配符

    使用通配符时,不适用ls命令也可查看当前目录下的文件

    1. #!/bin/bash
    2. for filename in *.sh
    3. do
    4. echo $filename
    5. done

    运行结果:
    demo.sh
    test.sh
    abc.sh

       

    使用特殊变量,如 $#、$*、$@、$?、$$ 等

    在函数中

    1. #!/bin/bash
    2. function func(){
    3. for str in $@
    4. do
    5. echo $str
    6. done
    7. }
    8. func C++Java Python 

    运行结果:
    C++
    Java
    Python

    使用特殊变量,如 $#、$*、$@、$?、$$ 等

    省略 val_list,省略后的效果和使用$@一样

    1. #!/bin/bash
    2. function func(){
    3. for str
    4. do
    5. echo $str
    6. done
    7. }
    8. func C++ Java Python

    运行结果:
    C++
    Java
    Python

  • 相关阅读:
    传奇检测命令大全(常用命令)
    传奇版本中利用NPC迅速给人物加血脚本制作
    传奇泡点地图制作脚本
    双击包裹物品自动解包设置方法_传奇版本技术
    传奇地图事件触发脚本
    单机架设传奇服务器第47课:定时器OnTimer功能详解
    单机架设传奇服务器:机器人运行脚本文件
    检测某个地图某个怪物的数量的脚本
    检测当前人物是否在安全区脚本命令
    假人配置说明
  • 原文地址:https://www.cnblogs.com/mianbaoshu/p/12069606.html
Copyright © 2011-2022 走看看