hell for循环

Posted ting152

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了hell for循环相关的知识,希望对你有一定的参考价值。

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

for循环用法说明实例1实例2实例3实例4实例5
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



以上是关于hell for循环的主要内容,如果未能解决你的问题,请参考以下文章

在 Activity 内部,如何暂停 for 循环以调用片段,然后在按钮单击片段后恢复循环以重新开始

如何在Django视图中使用for循环返回每次迭代[关闭]

如何使用引导程序和 for 循环在 django 中创建电影片段?

for循环结构

codeblock代码片段

shell编程:for 循环