Shell编程之循环语句

Posted 还行少年

tags:

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

一、使用for循环语句

1.for语句的结构

使用for循环语句时,需要指定一个变量及可能的取值列表,针对每一个不同的取值重复执行相同的命令序列,知道变量值用完退出循环。在这里,“取值列表”为for语句的执行条件,其中包括多个属性相同的对象,需要预先指定

for循环语句的语法结构

for 变量名 in 取值列表
do 
    命令序列
done

2.for语句的执行流程

首先将列表中的第一个值赋给变量,执行do。。。done循环体中的命令序列
然后将列表中的第二个值赋给变量,并执行循环体中的命令序列。。。
直到列表中的所有取值用完,最后跳至done语句,表示结束循环

3.for语句应用实列

示例1 99乘法表

[root@localhost ~]# cat 99.sh 
#!/bin/bash
a=0
for ((i=1;i<10;i++))
do 
    for ((j=1;j<=$i;j++))
    do
       let a=$[$i * $j]
       echo -n "$i*$j=$a "  
    done
   echo 
done


  
    
[root@localhost ~]# bash 99.sh 
1*1=1 
2*1=2 2*2=4 
3*1=3 3*2=6 3*3=9 
4*1=4 4*2=8 4*3=12 4*4=16 
5*1=5 5*2=10 5*3=15 5*4=20 5*5=25 
6*1=6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36 
7*1=7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49 
8*1=8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64 
9*1=9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81 
[root@localhost ~]# 

示例2 直角三角形

[root@localhost ~]# cat star.sh 
#!/bin/bash
read -p "请输出规格" n
for ((j=1;j<=$n;j++))
do
   for ((i=1;i<=$j;i++))
   do
   echo -n "* "
   done
   echo
done
 
[root@localhost ~]# bash star.sh 
请输出规格10
* 
* * 
* * * 
* * * * 
* * * * * 
* * * * * * 
* * * * * * * 
* * * * * * * * 
* * * * * * * * * 
* * * * * * * * * * 
[root@localhost ~]# 

示例3 等腰三角形

[root@localhost ~]# cat dengyao2.sh 
#!/bin/bash
read -p "请输入三角形边长: " a
for ((i=1;i<=$a;i++))
do 
     
     for ((j=1;j<=$a-$i;j++))
     do
     echo -n  " "
     done 
     for ((j=1;j<=$i;j++))
     do
     echo -n "* "
     done
     echo 
done     
[root@localhost ~]# bash dengyao2.sh 
请输入三角形边长: 10
         * 
        * * 
       * * * 
      * * * * 
     * * * * * 
    * * * * * * 
   * * * * * * * 
  * * * * * * * * 
 * * * * * * * * * 
* * * * * * * * * * 
[root@localhost ~]#

示例4 判断网段主机存活

[root@localhost ~]# cat ping.sh 
#!/bin/bash
for i in {1..254}
do 
ping -c 2 192.168.30.$i &> /dev/null
if [ $? -eq 0 ];then
echo "主机192.168.30.$i 网络通"
else
echo "主机192.168.30.$i 网络不通"
fi
done

[root@localhost ~]# bash ping.sh 
主机192.168.30.1 网络不通
主机192.168.30.2 网络通
主机192.168.30.3 网络不通
主机192.168.30.4 网络通
^Z
[1]+  已停止               bash ping.sh
[root@localhost ~]# 

示例5 判断用户是否存在

[root@localhost ~]# cat users.txt 
zhangsan
lisi
wangwu

[root@localhost ~]# cat users.sh 
#!/bin/bash
for i in `cat users.txt`
do
id $i &> /dev/null
if [ $? -eq 0 ];then
echo "用户$i已存在"
else 
useradd $i
fi
done 
[root@localhost ~]# bash users.sh 
用户zhangsan已存在
用户lisi已存在
用户wangwu已存在
[root@localhost ~]# 

二、使用while循环语句

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

1.while语句的结构

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

while循环语句的语法结构

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

2.while语句的执行流程

首先判断while后的条件测试操作结果,如果条件成立,执行do。。。done循环体中的命令序列
返回while后再次判断条件测试结果,如果条件仍然成立,则继续执行循环体;
如此循环,直到while后的条件测试结果不再成立为止,最后跳转到done语句,表示结束循环

3.while语句应用示例

示例1 1到100相加

[root@localhost ~]# cat while.sh 
#!/bin/bash
i=1
a=0
while [ $i -le 100 ]
do
let a=$i+$a
let i++
done
echo $a
[root@localhost ~]# bash while.sh 
5050
[root@localhost ~]# 

示例2 猜数字游戏

[root@localhost ~]# cat caishuzi.sh
#!/bin/bash
#猜数字游戏
sj=$(($RANDOM%10))
while true
read -p "请输入数字,0-9 "  n
do
if [ $n -eq $sj ];then
 echo "恭喜你答对了"
exit
elif [ $n -gt $sj ];then 
echo "大了"
else
echo "小了"
fi
done
[root@localhost ~]# bash caishuzi.sh 
请输入数字,0-9 4
大了
请输入数字,0-9 2
大了
请输入数字,0-9 1
大了
请输入数字,0-9 0
恭喜你答对了
[root@localhost ~]# 

三、使用until循环语句

until循环语句和while语句用法相反,while以true作为条件,循环体内的命令将永远执行下去,而until以false作为条件,循环体内的命令将永远执行下去

示例 一百内数的和

[root@localhost ~]# cat caishuzi.sh 
#!/bin/bash
#一百内数的和
i=1
a=0
until [ $i -gt 100 ]
do
let a=$a+$i
let i++ 
done
echo $a
[root@localhost ~]# bash caishuzi.sh 
5050
[root@localhost ~]# 

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

Shell编程之循环语句

shell if 语句

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

Shell编程之循环语句

Shell编程之循环语句

shell脚本——编程之循环语句(forwhileuntil)