shell循环之for、while和until

197 阅读2分钟

循环是什么

循环是重复的一段代码,循环中有三种专业的术语:遍历、迭代、递归

  • 遍历(traversal) - 按规则访问非线性结构中的每一项
  • 迭代(iterate) - 按顺序访问线性结构中的每一项
  • 递归(recursion) - 在函数内调用自身, 将复杂情况逐步转化成基本情况

循环的进入和退出都是有相应的条件的

循环的次数分为两种状态

  • 一.已知循环次数
  • 二.未知循环次数

常用的循环命令: for、while、until

for

用法:

  • 读取不同的变量值,用来逐个执行同一组命令
  • 使用场景:一般用于循环次数事先已知的场景
  • 执行机制:遍历

示例:

for 变量名 in 取值列表
    do
    所用的命令
    done

执行机制: image.png

for命令执行示例:

for i in {1..10}
do
echo $i
done

image.png

for命令循环执行示例

求从1加到10的和

vim xunhuan.sh  #.sh是让人一看就知道这是shell脚本
#!/bin/bash

sum=0
for i in {1..10}
do
    sum=$[sum+i]
done
echo "求得和是$sum"
bash xunhuan.sh

image.png

for有三个默认分隔符
环境变量$IFS,是指内部字段分隔符, 默认为三个:空格、制表符 \t、换行符\n

可以用 set | grep IFS查看

image.png

while

用法:

  • 重复测试某个条件,只要条件成立则反复执行。
  • 使用场景:相对于for需要知道循环次数,当我们只知道停止条件,不知道次数时,就需要使用while

格式

while 条件测试操作
  do
       命令序列
  done

image.png

while命令执行示例

a=0
while [ $a -le 10 ]
do
echo $a
let a++
done

image.png 如果不加let a++,a就会一直打印0,因为a无法满足a=10,不会结束这个命令

for命令循环执行示例

chmod +x while01.sh
./while01.sh   #可以给文件权限然后执行绝对路径命令
#!/bin/bash

price=$[RANDOM%100+1]
a=0
while true
do
   read -p "猜数字(1-100):" num
   let a++
   if [ $num -eq $price ]
   then
      echo "恭喜你对了"
      echo "你一共猜了$a次"
      exit
   elif [ $num -lt $price ]
   then
      echo "低了"
   else [ $num -gt $price ]
      echo "高了"
   fi
done

image.png image.png

until

用法:

  • 重复测试某个条件,只要条件不成立则反复执行。

格式:

until 条件测试操作
  do     
  命令序列  
  done

image.png

until命令执行示例

a=1
until [ $a -gt 10 ]
do
echo $a
let a++
done

image.png

until命令循环执行示例

vim until01.sh
#!/bin/bash

sum=0
i=1
until [ $i -gt 10 ]
do
   let sum=$[sum+i]
   let i++
done
echo "1到10的和为:$sum"
bash until01.sh

image.png