shell脚本while循环


除了if...then...fi条件判断式之外,循环是程序中最重要的了, 循环可以不断的执行某个程序段,直到用户设定的条件达成为止。
除了依据判断式达成与否的不定循环之外, 还有另外一种已经固定要跑多少次的循环形态,可称为固定循环!
while do done, until do done (不定循环)
不定循环最常见的就是这两种:
while [ condition ]  #中括号内为判断式
do      #do 是循环的开始!
  程序段落
done
done是循环的结束,while的中文是当...时,当condition条件成立时,就进行循环,直到condition的条件不成立才停止。
另外一种不定循环的方式:
until [ condition ]
do
  程序段落
done
与while相反,until是当condition条件成立时,就终止循环, 否则就持续进行循环的程序段。
假设让用户输入yes或者YES才结束程序的执行,否则就一直进行告知用户输入字符串。
[peter@study bin]$ vim yes_to_stop.sh
#!/bin/bash
# Program:
# Repeat question until user input correct answer.
# History:
# 2015/07/17 VBird First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
while [ "${yn}" != "yes" -a "${yn}" != "YES" ]
do
  read -p "Please input yes/YES to stop this program: " yn
done
echo "OK! you input the correct answer."
是${yn}变量不是"yes"和"YES"时,才进行循环内的程序。
如果${yn}是"yes"或"YES"时,就会离开循环, 如果用until,条件会变成这样:
[peter@study bin]$ vim yes_to_stop-2.sh
#!/bin/bash
# Program:
# Repeat question until user input correct answer.
# History:
# 2015/07/17 VBird First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
until [ "${yn}" == "yes" -o "${yn}" == "YES" ]
do
  read -p "Please input yes/YES to stop this program: " yn
done
echo "OK! you input the correct answer."
利用循环计算1+2+3+....+100:
[peter@study bin]$ vim cal_1_100.sh
#!/bin/bash
# Program:
# Use loop to calculate "1+2+3+...+100" result.
# History:
# 2015/07/17
VBird First release
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
s=0 # 这是加总的数值变量
i=0 # 这是累计的数值,亦即是 1, 2, 3....
while [ "${i}" != "100" ]
do
  i=$(($i+1))  # 每次 i 都会增加 1
  s=$(($s+$i)) # 每次都会加总一次!
done
echo "The result of '1+2+3+...+100' is ==> $s"
执行sh cal_1_100.sh就可以得到5050!
如果想要让用户自行输入一个数字,让程序由1+2+... 直到你输入的数字为止, 该如何撰写呢?

initroot编辑整理,转载请注明www.initroot.com

100次点赞 100次阅读