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编程之循环语句的主要内容,如果未能解决你的问题,请参考以下文章