linux shell 循环语句 for while until

ゞ 浴缸里的玫瑰 2021-07-28 12:46 627阅读 0赞

for/do/done

Shell脚本的for循环结构和C语言很不一样,它类似于某些编程语言的foreach循环。例如:

  1. #! /bin/sh
  2. for FRUIT in apple banana pear; do
  3. echo "I like $FRUIT"
  4. done

FRUIT是一个循环变量,第一次循环$FRUIT的取值是apple,第二次取值是banana,第三次取值是pear。再比如,要将当前目录下的chap0、chap1、chap2等文件名改为chap0~、chap1~、chap2~等(按惯例,末尾有~字符的文件名表示临时文件),这个命令可以这样写:

  1. for FILENAME in chap?; do mv $FILENAME $FILENAME~; done

也可以这样写:

  1. for FILENAME in `ls chap?`; do mv $FILENAME $FILENAME~; done
  2. #! /bin/bash
  3. # 打印乘法表
  4. for i in `seq 1 9`
  5. do
  6. for j in `seq 1 $i`
  7. do
  8. res=`expr $j \* $i`
  9. echo -e "$j*$i=$res\t\c"
  10. done
  11. echo -e " "
  12. done

while/do/done

while的用法和C语言类似。比如一个验证密码的脚本:

  1. #! /bin/sh
  2. echo "Enter password:"
  3. read TRY
  4. while [ "$TRY" != "secret" ]; do
  5. echo "Sorry, try again"
  6. read TRY
  7. done

until/do/done

unti 循环和 while 循环恰好相反,当判断条件不成立时才进行循环,一旦判断条件成立,就终止循环。

Shell until 循环的用法如下:

  1. until condition
  2. do
  3. statements
  4. done

condition表示判断条件,statements表示要执行的语句(可以只有一条,也可以有多条),dodone都是 Shell 中的关键字。

until 循环的执行流程为:

  • 先对 condition 进行判断,如果该条件不成立,就进入循环,执行 until 循环体中的语句(do 和 done 之间的语句),这样就完成了一次循环。
  • 每一次执行到 done 的时候都会重新判断 condition 是否成立,如果不成立,就进入下一次循环,继续执行循环体中的语句,如果成立,就结束整个 until 循环,执行 done 后面的其它 Shell 代码。
  • 如果一开始 condition 就成立,那么程序就不会进入循环体,do 和 done 之间的语句就没有执行的机会。

注意,在 until 循环体中必须有相应的语句使得 condition 越来越趋近于“成立”,只有这样才能最终退出循环,否则 until 就成了死循环,会一直执行下去,永无休止。

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

运行结果:
The sum is: 5050

break和continue

break[n]可以指定跳出几层循环,continue跳过本次循环步,没跳出整个循环。

break跳出,continue跳过。

发表评论

表情:
评论列表 (有 0 条评论,627人围观)

还没有评论,来说两句吧...

相关阅读