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 INITroot 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 INITroot 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
              INITroot 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次阅读