Shell ❀ 循环语句

本文详细介绍了循环语句的三种形式:带列表的for循环,不带列表的for循环,以及类C风格的for循环,涵盖了文件操作、while循环的多种读取方式和不同类型的循环。此外,还展示了如何使用嵌套循环实现9x9乘法表实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

五、循环语句

1、for 循环

for循环是编程语句中非常常见的一种循环,以列表为范围遍历其中变量,进行运算或执行某些命令以达到某些要求;for循环主要分为三种类型:带列表的for循环、不带列表的for循环、类C风格的for循环;

1.1 带列表的for循环

for variable in {list}     #遍历列表中的变量
do                         #循环开始标识
    statement1             #变量的声明1
    statement2             #变量的声明2
    ...
done   

此语法中,variable称为循环变量,list是一个列表,可以是一系列的数字或者字符串,元素直接使用空格间隔,dodone之家的语句称为循环体,即循环结果中重复执行的语句内容,for循环的循环次数与list元素的个数有关。

[root@localhost shell]# cat IP.sh 
#!/bin/bash

for IP in 192.168.1.101 192.168.1.102
#for IP in 192.168.1.{1..10}
#for IP in $(seq -f "192.168.1.10%1g" 1 5)
#通过不同的遍历方式可以实现以固定步长增加数值

do
	echo $IP
done

[root@localhost shell]#  sh a11.sh 
192.168.1.1
192.168.1.2
192.168.1.3
192.168.1.4
192.168.1.5
192.168.1.6
192.168.1.7
192.168.1.8
192.168.1.9
192.168.1.10

1.2 不带列表的for循环

for variable
do
    statement1
    statement2
    ...
done

当循环代码块内不带list列表时,需要在调用脚本时定义遍历内容,否则产生报错;

[root@localhost shell]# cat a11.sh 
#!/bin/bash

for IP 
do
	echo 192.168.1.$IP
done
[root@localhost shell]# ./a11.sh {1..10}
192.168.1.1
192.168.1.2
192.168.1.3
192.168.1.4
192.168.1.5
192.168.1.6
192.168.1.7
192.168.1.8
192.168.1.9
192.168.1.10

1.3 类C风格的for循环

for ((expression1;expression2;expression3))
do
    statement1;
    statement2;
    ...
done

此代码块中通过不同的运算符定义了不同的变量范围区间,以此为列表进行遍历;

[root@localhost shell]# cat ip_addr.sh 
#!/bin/bash

for ((i=1;i<=254;i++))
#变量i首先赋值为1,步长为1进行递增,其值小于等于254
do
	if ping -c 2 -w 1 192.168.1.$i &> /dev/null
	then
		echo "192.168.1.$i is up!!"
	else
		echo "192.168.1.$i is down!!"
	fi
done

2、while 循环

while循环是另外一种常见的循环结构,使用while循环,可以使得用户重复执行一系列的操作,直到某个条件的发生。

while expression     #当前的条件表达式
do
    statement1       #满足条件时的声明1
    statement2       #满足条件时的声明2
done

2.1 循环体读取文件的三种方法

循环中若想引入文件内容,主要分为三种引入方法:采用exec命令读取文件、采用cat命令读取文件、采用输入重定向读取文件;

  • 使用exec命令读取文件
exec < file
while read line 
do
    statement
done
  • 使用cat命令读取文件
cat file | while read line
do 
    statement
done
  • 使用输入重定向读取文件
while read line
do 
    statement
done < file

2.2 循环类型

while循环主要用于重复循环,主要分为三种类型:随机数循环、until循环、select循环;

  • 随机数循环:产生随机数,比较输入值与随机数的大小,相同则结束程序。
[root@localhost shell]# cat RANDOM.sh 
#!/bin/bash

PRICE=$[$RANDOM % 100]
TIMES=0

while true
do
	read -p "Please enter your number:" INT
	let TIMES++
	if [ $INT -eq $PRICE ]
	then 
		echo "is lucking,you bingo it!"
		echo "is $TIMES times!"
		exit 100
	elif [ $INT -gt $PRICE ]
	then 
		echo "$INT is too high"
	else
		echo "$INT is too low"
	fi
done
  • until循环
until expression
do
    statement1
    statement2
    ...
done
  • select循环
select 变量名 [ in 菜单值列表 ]
do
    statement1
    statement2
...
done

3、嵌套循环案例

  1. 打印9x9乘法表
[root@localhost shell]# cat 9_9.sh 
#!/bin/bash
for i in {1..9}
do
for j in {1..9}
do
[ $j -le $i ] && echo -n "$i*$j=`echo $(($i*$j))`  "
done
echo " "
done
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

无糖可乐没有灵魂

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值