shell编程之循环语句与控制语句

目录

前言

一、使用for循环语句

1、for循环基本概念

2、典型for应用

二、使用while循环语句

1、while语句简介

2、实际应用

三、使用until循环语句

四、循环控制语句

1、continue

2、break

3、exit

总结


前言

       实际工作环境中,当面对各种列表重复负责任务时,使用简单得if语句难以满足要求,而顺序

编写全部代码,显得繁琐,那么循环语句就可以很好得解决类似得问题

一、使用for循环语句

1、for循环基本概念

       使用for循环语句时,需要指定一个变量可能的取值列表(for语句执行条件),针对每一个不

同 的取值重复执行相同的命令序列,直到变量值用完退出循环。

                                         shell编程之循环语句与控制语句

 shell编程之循环语句与控制语句

         in关键字为变量i预先设置了一个取值列表,多个取值之间以空格进行分隔。do……done之间

的为命令序列,称为“循环体”。取值列表为for语句的执行条件,其中包括多个属性相同的对象,需

要预先指定(如通讯录、IP、黑名单、邮件地址列表等等)。

2、典型for应用

①、for循环简单应用

[root@kang mytext]# vim forxx.sh
#!/bin/bash
#可以输出1-10的数
a=10
for i in `seq $a`
do
   echo $i  
done
[root@kang mytext]# bash forxx.sh 
1
2
3
4
5
6
7
8
9
10
[root@kang mytext]# vim forxx.sh
#!/bin/bash
  #输出0~50中间的偶数,“命令含义,0~50每隔两位输出”。{1..50..2}可以输出奇数
for i in {0..50..2} 
do
   echo $i
done
[root@kang mytext]# bash forxx.sh 
0
2
4
6
8
10
12
……

②、使用双重for循环创建九九乘法表

[root@kang mytext]# vim forxx.sh
#!/bin/bash
#九九乘法表,方法一
#双重for循环

#for ((i=1;i<=9;i=i+1))
#do 
#    for ((j=1;j<=i;j++))
#    do
#       echo -n " $i x $j=$(expr $i \* $j) "       #-n是不换行
#           if [ $j -eq $i ];then

#               echo " "     # 或者echo -e "\n"    #换行,
#           fi

#    done
#done
[root@kang mytext]# bash forxx.sh 
 1 x 1=1  
 2 x 1=2  2 x 2=4  
 3 x 1=3  3 x 2=6  3 x 3=9  
 4 x 1=4  4 x 2=8  4 x 3=12  4 x 4=16  
 5 x 1=5  5 x 2=10  5 x 3=15  5 x 4=20  5 x 5=25  
 6 x 1=6  6 x 2=12  6 x 3=18  6 x 4=24  6 x 5=30  6 x 6=36  
 7 x 1=7  7 x 2=14  7 x 3=21  7 x 4=28  7 x 5=35  7 x 6=42  7 x 7=49  
 8 x 1=8  8 x 2=16  8 x 3=24  8 x 4=32  8 x 5=40  8 x 6=48  8 x 7=56  8 x 8=64  
 9 x 1=9  9 x 2=18  9 x 3=27  9 x 4=36  9 x 5=45  9 x 6=54  9 x 7=63  9 x 8=72  9 x 9=81  
[root@kang mytext]# vim forxx.sh
#!/bin/bash
#九九乘法表,其他的应用
#for ((i=10;i<=19;i=i+1))
#do 
#    for ((j=10;j<=i;j++))
#    do
#           if [ $j -le $i ];then
#               echo -n "${i}x${j}=$((i*j)) "
#           fi
#           if [ $j -eq $i ];then
#               echo -e "\n"    
        #       echo " "
#           fi

#    done
#done

③、求和

[root@kang mytext]# vim forxx.sh
#!/bin/bash
sum=0
for i in {1..100}
do
if [ $((i%2)) -eq 0 ];then
        let sum=$i+$sum    #1-100偶数求和
fi
done
echo $sum
[root@kang mytext]# bash forxx.sh 
2550

④、批量创建用户

[root@kang mytext]# vim forxx.sh
#!/bin/bash
for userna in $(cat /mytext/user.txt)    # user.txt文件内容为用户名
do
id $userna &> /dev/null
       if [ $? -eq 0 ];then
        echo "$userna 该用户已存在"
else
       useradd $userna    #调用用户名列表来创建用户
       echo "123456" | passwd --stdin $userna &>/dev/null
       echo "已创建用户$userna,并设置密码 " 
fi
done
[root@kang mytext]# bash forxx.sh 
wangwu 该用户已存在
zhangsan 该用户已存在
正在创建信箱文件: 文件已存在
已创建用户lisi,并设置密码
########.............或者可以批量创建简单用户名的用户
#for i in {1..5}   
#do
#   useradd kgc$1
#   echo "123456" |passwd --stdin kgc$1
#done

⑤、或者可以判断输入密码是否正确

[root@kang mytext]# vim forxx.sh
#!/bin/bash
init=123456
for i in {1..3}
do 
       read -p "请输入密码" pass
           if [ $pass == $init ];then
               echo "密码正确"
                       exit
           fi
done
   echo "密码错误"

         for语句非常适合用于列表对象无规律,且列表来源已固定(如某个列表文件)的场合。但是

对于要求控制循环次数、操作对象按数字顺序编号、按特定条件执行重复操作等情况,则更适合使

用另外的一种循环while语句

二、使用while循环语句

1、while语句简介

       使用 while循环语句时,可以根据特定的条件反复执行一个命令序列,直到该条件不再满足时

为止。在脚本应用中,应该避免出现死循环的情况,否则后边的命令操作将无法执行。因此,循环

体内的命令序列中应包括修改测试条件的语句,以便在适当的时候使测试条件不再成立,从而结束

循环。

while循环语句的语法结构如下所示:

                                        shell编程之循环语句与控制语句

         注意:使用 while循环语句时,有两个特殊的条件测试操作,即true(真)和 false(假)·使

用true作为条件时,表示条件永远成立,循环体内的命令序列将无限执行下去,除非强制终止脚本

(或通过exit语句退出脚本);反之,若使用 false作为条件,则循环体将不会被执行。这两个特殊

条件也可以用在if语句的条件测试中。

2、实际应用

①、简单while循环

[root@kang mytext]# vim whilexx.sh
#!/bin/bash
i=1
while [ $i -le 5 ]
do
    echo $i
    let i++      #无此条件将死循环
done
echo "最后的i,值为:$i"
[root@kang mytext]# bash whilexx.sh 
1
2
3
4
5
最后的i,值为:6
[root@kang mytext]#

②、输出1~100不能被3整除的数

[root@kang mytext]# vim whilexx.sh
#!/bin/bash
i=1
while [ $i -le 100 ]
  do
  if [[ $i%3 -ne 0 ]]    # %属于数字运算,一个中括号不能运行
  then 
    echo "$i"
  fi
  let i++
done
[root@kang mytext]# bash whilexx.sh 
1
2
4
5
7
……

③、猜商品价格游戏

[root@kang mytext]# vim whilexx.sh
#!/bin/bash
PRICE=`expr $RANDOM % 1000`    #使用系统随机数$RANDOM
a=0
echo "商品实际价格范围0-999,猜猜看是多少?"
while true
do
   read -p "请输入你猜测的价格数目:" n
       let a++
         if [ $n -eq $PRICE ];then
            echo "恭喜你回答正确,实际价格是$PRICE"
            echo "你总共猜测了$a次"
            break
         elif [ $n -gt $PRICE ];then
            echo "猜错。提示:高"
         elif [ $n -lt $PRICE ];then
            echo "猜错。提示:低"
        # elif [ $n -gt 1000 ];then
         else
            echo "傻了吗"
         fi
done
[root@kang mytext]# bash whilexx.sh
……
请输入你猜测的价格数目:919
恭喜你回答正确,实际价格是919
你总共猜测了9次
[root@kang mytext]#

④、服务监控

[root@kang mytext]# vim whilexx.sh
#!/bin/bash
while ps aux | grep httpd | grep -v grep &>/dev/null
 do
 echo "httpd open"
 sleep 60
done
DATE=`%y/%m/%d` 
 echo "$DATE httpd服务器未启动,请尽快处理故障!" > /mytext/httpd.txt
[root@kang mytext]# bash whilexx.sh
[root@kang mytext]# vim httpd.txt
21-09-14-13:03:11 httpd服务器未启动,请尽快处理故障!
……
     

三、使用until循环语句

       重复测试某个条件,只要条件不成立则反复执行。它与while测试刚好相反。

                                        shell编程之循环语句与控制语句

 

[root@kang mytext]# vim untilxx.sh
#!/bin/bash
#1-50赋值相加总和
i=1
until [ $i -eq 51 ]  #条件为假则继续运行以下;真则退出循环。
    do
      sum=$[$i+$sum]
        let i++
done
        echo "$sum"
[root@kang mytext]# bash untilxx.sh 
1275

四、循环控制语句

       循环一般会搭配条件判断语句和流程控制语句一起执行,那么就会出现需要跳过循环和中止循

环的情况,控制循环的命令有以下3个

1、continue

       继续,但不会执行循环体内下面的代码了,开始重新开始下一次循环。即continue是跳过当次

子循环中剩下的语句,执行下一次循环。

[root@kang mytext]# vim untilxx.sh 
#!/bin/bash
for ((i=1;i<=5;i++))
do
        if [ $i -eq 3 ];then
        continue #结果是1245,3不输出,跳出后面的echo语句执行下一次循环

        else
        echo $i
        fi
done
[root@kang mytext]# bash untilxx.sh 
1
2
4
5

2、break

打断,马上停止本次循环,执行循环体外的代码。

[root@kang mytext]# vim untilxx.sh 
#!/bin/bash
for ((i=1;i<=5;i++))
do
        if [ $i -eq 3 ];then
        break #结果是12,3以后都不输出,终止本次循环
        else
        echo $i
        fi
done
[root@kang mytext]# bash untilxx.sh 
1
2

3、exit

       直接跳出程序,后面可跟状态返回码如exit 1等等。

[root@kang mytext]# vim untilxx.sh 
#!/bin/bash
for ((i=1;i<=5;i++))
do
        if [ $i -eq 3 ];then
        exit 122  #结果是12,exit直接跳出程序,并返回返回码
        else
        echo $i
        fi
done
[root@kang mytext]# echo $?
0
[root@kang mytext]# bash untilxx.sh 
1
2
[root@kang mytext]# echo $?
122

总结

for:读取不同变量值,用来执行同一组命令

while:重复测试某个条件,只要条件成立则反复执行

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

循环控制语句:continue、break、exit

 

上一篇:再读:Linux系统命令及Shell脚本实践指南(二)


下一篇:华为HCNA路由与交换eNSP实战-负载分担和路由备份