Shell语言学习笔记(六)—— while循环语句

在之前的博文中我们讨论了 Shell语言学习笔记(三)—— for循环 语句的使用,下面我们介绍另一种也可以用于实现多次的重复操作的循环语句——while循环语句。

在shell中,while循环语句的一般语法如下:

while [ condition ]
do
   commands
done

其中 condition是判断条件,若condition为真,则执行循环体内的命令;若condition为假,则直接退出当前循环。commands表示需要执行的命令,可以有多个。当所有命令执行完后,再次检查condition是否为真,如果为真,则继续执行循环体内的命令;如果为假,则退出循环。此外,判断条件可以是一个条件,也可以是多个条件通过操作符&&、||、!连接的综合条件。注意:在使用逻辑操作符时,需要将条件用括号括起来,以明确优先级。

实例1:计算1到10的和

~/shell$ cat while.sh 

#!/bin/bash
sum=0		  #对sum进行赋初值
i=0

while [ $i -le 10 ]
do
sum=$(($sum+$i))  #求和
i=$((i+1))        #循环变量 i 加一
done

echo $((sum))

j=0
sum1=0

while [ $j -le 10 ]
do
sum1=$(($sum1+$j))  #求和
let j++     	   #循环变量 i 加一
done

echo $((sum1))
~/shell$ bash while.sh 
55
55

注意:while中的循环变量不会自动变化,需要使用语句实现循环变量的变化。

实例2:输出1~10

~/shell$ cat while.sh 

#!/bin/bash
echo "以下输出1~10:"
i=1
while [ $i -le 10 ]
do
echo $i
i=$((i+1))        #循环变量 i 加一
done

#输出1~10以内的偶数
echo "以下输出1~10以内的偶数:"
j=1
while [ $j -le 10 ]
do
	if [ $(($j%2)) -eq 0 ];then   # %符号为取余

		echo $j
	fi
j=$((j+1))        #循环变量 i 加一
done
~/shell$ bash while.sh 
以下输出1~10:
1
2
3
4
5
6
7
8
9
10
以下输出1~10以内的偶数:
2
4
6
8
10

实例3:特殊图形的输出,此处以菱形为例

~/shell$ cat while.sh 
#!/bin/bash
read -p "请输入菱形的对角线长度的一半:" l
#菱形的对角线上的*的个数为:2l+1

#当变量参数小于l时,该行既有空格又有*号。*号的个数为2i+1,其余为空格
#当变量参数等于l时,该行只有*号,且个数为2l+1 

#菱形的上三角形的输出
i=1
while [ $i -le $l ]    
do 
j=1	
	while [ $j -le $(($l-$i)) ]   
	do
	   echo -n " "
	   let j++       #循环变量j加一

	done
	while [ $j -gt $(($l-$i)) ] && [ $j -le $(($l+$i-1)) ] 
	do
	   echo -n "*"
	   let j++

	done
echo "  "        #进行换行
i=$((i+1))      #循环变量i加一
done

#菱形的下三角形的输出
#此时无需对循环变量i赋初值,沿用上一个循环最后的循环变量值即可,即 i=l+1
#也可以采用该命令进行赋初值 i=$(($l+1))
while [ $i -gt $l ] && [ $i -lt $((2*$l+1)) ]     
do 
#j=$l
j=1
	
	while [ $j -le $(($i-$l)) ]   
	do
	   echo -n " "
	   let j++

	done
	while [ $j -gt $(($i-$l)) ] && [ $j -le $((3*$l-$i-1)) ]   #j>=i-j且j<=2l-(i-l)-1=3l-i-1
	do
	   echo -n "*"
	   let j++

	done
echo "  "        #进行换行
i=$((i+1))      #循环变量i加一
done

~/shell$ bash while.sh 
请输入菱形的对角线长度的一半:6
     *  
    ***  
   *****  
  *******  
 *********  
***********  
 *********  
  *******  
   *****  
    ***  
     *  

实例4:输出九九乘法表

~/shell$ cat while.sh 
#!/bin/bash

i=1
while [ $i -le 9 ]    
do 

j=1	
	while [ $j -le $i ]   
	do
	   sum=$(($i*$j))
	   echo -n "$j * $i = $sum   "
	   #echo -n "  "
	   let j++      #循环变量j加一

	done
	
echo "  "        #进行换行
i=$((i+1))      #循环变量i加一
done

~/shell$ bash while.sh 
1 * 1 = 1     
1 * 2 = 2   2 * 2 = 4     
1 * 3 = 3   2 * 3 = 6   3 * 3 = 9     
1 * 4 = 4   2 * 4 = 8   3 * 4 = 12   4 * 4 = 16     
1 * 5 = 5   2 * 5 = 10   3 * 5 = 15   4 * 5 = 20   5 * 5 = 25     
1 * 6 = 6   2 * 6 = 12   3 * 6 = 18   4 * 6 = 24   5 * 6 = 30   6 * 6 = 36     
1 * 7 = 7   2 * 7 = 14   3 * 7 = 21   4 * 7 = 28   5 * 7 = 35   6 * 7 = 42   7 * 7 = 49     
1 * 8 = 8   2 * 8 = 16   3 * 8 = 24   4 * 8 = 32   5 * 8 = 40   6 * 8 = 48   7 * 8 = 56   8 * 8 = 64     
1 * 9 = 9   2 * 9 = 18   3 * 9 = 27   4 * 9 = 36   5 * 9 = 45   6 * 9 = 54   7 * 9 = 63   8 * 9 = 72   9 * 9 = 81   

for循环语句和while循环语句的区别与联系:

for循环和while循环可以实现相同的功能,不同之处在于它们的语法结构和用法有所区别。

for循环的语法结构如下:

for 变量名 in 取值列表
do
    循环体
done

其中,变量名表示循环变量,取值列表是一组用空格分隔的值,循环变量会依次取这些值执行循环体。

while循环的语法结构如下:

while 条件
do
    循环体
done

其中,条件表示循环条件,只要条件成立,就会一直执行循环体。条件一般是一个命令或表达式,返回值为0表示条件成立,非0表示条件不成立。

for循环和while循环的不同之处在于:

  1. for循环一般用于已知循环次数的情况下,而while循环适用于不知道循环次数或需要检查某些条件是否成立的情况下。

  2. for循环的循环变量是在循环开始前就确定了取值列表,而while循环的条件表达式可以根据循环过程中的结果动态调整。

  3. for循环的循环次数是已知的,while循环的循环次数是不确定的。

for循环和while循环的相同之处有:

    1.for循环和while循环都可以实现循环执行相同的命令或操作。

    2.for循环和while循环都可以嵌套使用,实现多重循环嵌套。

  • 5
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值