Shell循环之for,while,until

Posted 我爱吃土豆

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Shell循环之for,while,until相关的知识,希望对你有一定的参考价值。

       

一.简介

   Shell编程中循环命令用于特定条件下决定某些语句重复执行的控制方式,在编程语言中,循环语句是最基本的语法之一,在Shell中也不例外。Shell中的循环语句一般有for、while、until这几种,偶尔还有写错语法的时候,这里结合实例来自己总结一下。也为今后使用提供一个快捷的资料获取渠道。有三种常用的循环语句:for、while和until。while循环和for循环属于“当型循环”,而until属于“直到型循环”。

 

二.详解

1.for循环

for 变量名 in 列表;do

  循环体

done

其中;可以换成回车,效果一样的

 

 

(1)最基本的for循环

#!/bin/bash 
for varible1 in {1..5};do
     echo "Hello, Welcome $varible1 times "
done
  • do和done之间的命令称为循环体,执行次数和list列表中常数或字符串的个数相同。for循环,首先将in后list列表的第一个常数或字符串赋值给循环变量,然后执行循环体,以此执行list,最后执行done命令后的命令序列。
  • Shell支持列表for循环使用略写的计数方式,1~5的范围用{1..5}表示(大括号不能去掉,否则会当作一个字符串处理)。其中数字也可以使用$(seq)来表示。      

(2)Sheel中还支持按规定的步数进行跳跃的方式实现列表for循环,例如计算1~100内所有的奇数之和。

#!/bin/bash
sum=0
for i in {1..100..2};do
    let sum+=i
done
echo "sum=$sum"

通过i按2不断递增,得到1-100的奇数之和。同样我们也可以使用seq来表示:for i in $(seq 1 2 100),seq表示起始数为1,跳跃的步数为2,到100结束。

(3)for也可以和其他的选择语句进行搭配使用,例如:创建一个脚本名为useradd.sh,当执行-a选项时,会批量创建用户mageuser1~mageuser20,要求mageuserX的uid为200x,mageuserxx的uid为20xx,1~8用户的shell为/sbin/nologin,9~20用户的uid为/bin/bash。最后这20个用户的密码都设置为centos;当执行-d选项时,批量删除用户mageuser1~mageuser20。连同家目录一同删除。

#!/bin/bash
case $1 in
    -a)for n in {1..20} ;do
            if [ $n -le 8 ];then
                useradd -u $[2000+$n] -s /sbin/nologin mageuser$n
            else
                useradd -u $(echo "2000+$n"|bc) mageuser$n
            fi
            echo "centos" |passwd --stdin mageuser$n &> /dev/null
            echo "mageuser$n created"
       done;;
    -d)for n in {1..20} ;do
            userdel -r mageuser$n
       done;;
     *)echo "Please type -a or -d";;
esac

case是一种条件判断语句,这里分为-a和-d,使用case最好(注意每次case分支结束后,后面有两个;)。echo "centos" |passwd --stdin mageuser$n &> /dev/null是批量修改密码,把它丢到/dev/null中,并不执行。

 

2. while循环

while CONDITION;do

  循环体

done

● CONDITION:循环控制条件;进入循环之前,先做以此判断,每次循环之后会再做一次判断;循环为“true”,则执行一次循环;直到循环为“flase”终止循环。

● CONDITION一般应该有循环控制变量;因此变量的值会在循环体不断地被改正。

● 进入循环之前while重复次数是利用一个条件来控制是否继续重复执行这个语句。为了避免死循环,必须保证循环体中包含循环出口条件

(1)基本的while循环,例如:打印从1到10

#!/bin/bash
n=0
while [ $n -lt 10 ];do
        echo $n
        let n++
done

首先定义一个变量n,判断n的值和10的大小关系,只要n的值为真,循环就会一直进行。let n++是让n的值每次加1。

 

 

(2)循环控制语句continue

continue用于循环体中

continue [n]:提前结束第n层本轮的循环,直接进入下一层循环;最内层为第一层(1也可以省去)。

1)continue基础应用


#!/bin/bash
n=0
while [ $n -lt 10 ];do
echo $n
let n++
if [ $n -eq 5 ];then
continue
fi
done

continue终止了这次循环,并继续下一个循环,所以打印结果依然是0-10。

 

(3)循环控制语句break

break用于跳出循环,可以跳出任何类型的循环

1)break跳出单层循环

#!/bin/bash
a=1
while [ $a -le 5 ];do
   if [ $a -eq 3 ];then
       break
   fi
   echo "a=$a"
   a=$[$a+1]
done

本脚本a从1开始取值,a<5时,一直进行循环,当a=3时,break终止循环,所以打印出来a的值为1和2。

 

2)break跳出多层循环

break n,n表示要跳出的循环层数,默认情况下 n=1,代表只跳出当前循环。

#!/bin/bash
a=1
while [ $a -le 5 ];do
   echo "a=$a"
   a=$[$a+1]
   for n in 1 2 3 4 5;do
        if [ $n -eq 3 ];then
            break 2
        fi
        echo " n=$n"
        n=$[$n+1]
   done
done

脚本中进行for循环,n=3时终止循环,但不会妨碍while进行的循环,所以之跳出for循环,打印出n=1,n=2。

 

3.until循环

until CONDITION;do

  循环体

done

进入条件:CONDITION为false

退出条件:CONDITION为true

until命令和while命令类似,但与while刚好相反,即whie循环在条件为真时继续执行循环而until则在条件为假时执行循环。

#!/bin/bash
until [ $n -eq 10 ];do
        echo $n
        let n++
done

n的初始值为0,每次循环加1,因为条件为假时执行循环,会一直打印从0到0,当n=10时,条件为真,终止循环。所以打印结果为0-9。

 

以上是关于Shell循环之for,while,until的主要内容,如果未能解决你的问题,请参考以下文章

shell 编程之 for while until 循环

for / while / until 基础循环语句案例图解 shell编程之循环语句

理论+实操:shell之case语句for/while/until循环语句函数数组-满满的干货

shell编程之case分支语句,for循环语句和while循环语句

Shell编程Shell中for循环while循环until循环语句

Shell编程Shell中for循环while循环until循环语句