FOR 循环与 WHILE 语句

Bash 脚本入门

Alex Scriven

Data Scientist

基本 FOR 循环结构

Python:

for x in range(3):
    print(x)
0
1
2

R:

for (x in seq(3)){
    print(x)
}
[1] 1
[1] 2
[1] 3
Bash 脚本入门

Bash 中的 FOR 循环

Bash 中的基本结构类似:

for x in 1 2 3

do echo $x done
1
2
3
Bash 脚本入门

FOR 循环数值范围

Bash 有一种简洁的数值范围写法:花括号展开:

  • {START..STOP..INCREMENT}
for x in {1..5..2}

do echo $x done
1
3
5
Bash 脚本入门

FOR 循环三表达式语法

另一种常见写法是"三表达式"语法。

  • 用双小括号括起三部分
  • 第一部分为起始表达式(x=2
  • 中间为终止条件(x<=4
  • 末尾为增量(或减量)表达式(x+=2

 

 

for ((x=2;x<=4;x+=2))
do 
    echo $x
done
2
4
Bash 脚本入门

通配展开(Glob)

Bash 也可在 for 循环中用 * 做模式匹配展开,如匹配目录中的文件。

例如,假设 /books 文件夹有两个文本文件:

for book in books/*
do  
    echo $book
done
books/book1.txt
books/book2.txt
Bash 脚本入门

再谈内层 shell

还记得用 $() 创建"内层 shell"吗?

也可直接用于 for 循环!

假设有如下文件结构:

books 目录结构

Bash 脚本入门

内层 shell 到 FOR 循环

我们可以遍历内层 shell 调用的结果:

for book in $(ls books/ | grep -i 'air')

do echo $book done
AirportBook.txt
FairMarketBook.txt
Bash 脚本入门

WHILE 语句语法

与 FOR 循环相似,但需设置在每次迭代测试的条件。

当条件不再满足时停止迭代。

  • while 替代 for
  • 条件放在方括号中
    • 数值比较标志与 IF 相同(如 -le
  • 可链式多个条件,或用双中括号配合 &&(与)或 ||(或),同 IF 语句
  • 确保循环体内有使其终止的变化(否则会是无限循环)
Bash 脚本入门

WHILE 语句示例

一个简单示例:

x=1

while [ $x -le 3 ];
do echo $x ((x+=1)) done
1
2
3
Bash 脚本入门

警惕无限循环

警惕无限 WHILE 循环:当退出条件永远不满足时会发生。

x=1
while [ $x -le 3 ]; 
do
    echo $x
    # 不递增 x。它永远达不到 3!
    # ((x+=1)) 
done

这将一直打印 1!

Bash 脚本入门

让我们来练习!

Bash 脚本入门

Preparing Video For Download...