shell编程----while和until循环


1. if-while语句

  while循环是shell脚本中最简单的一种循环,当条件满足时,while重复地执行一组语句;当条件不满足时,就退出while循环。
shell while循环的用法如下:

while condition
do
statements
done

  condition表示判断条件,statements表示要执行的语句(可以只有一条,也可以有多条),do和done都是shell中的关键字。
  while循环的执行流程为:先对condition进行判断,如果该条件成立,就进入循环,执行while循环体中的语句,也就是do和done之间的语句。这样就完成了一次循环。每一次执行到done的时候都会重新判断condition是否成立,如果成立,就进入下一次循环,继续执行do和done之间的语句,如果不成立,就结束整个while循环,执行done后面的其它shell代码。如果一开始condition就不成立,那么程序就不会进入循环体,do和done之间的语句就没有执行的机会。
  注意:在while循环体重必须有相应的语句使得condition越来越近于“不成立”,只有这样才能最终退出循环,否则while就成了死循环,会一直执行下去,永无休止。
  while语句和if else语句中的condition用法都是一样的,可以使用test或[]命令,也可以使用(())或[[]]。

#!/bin/bash
i=1
sum=0
while (( i <= 100))
do
	(( sum += i))
	(( i++ ))
done
echo "sum=$sum"

结果:
sum=5050

#!/bin/bash

read m
read n

sum=0

while ((m<=n))
do
	((sum+=m))
	((m++))
done
echo "the sum is:$sum"

结果:
4
10
the sum is:49

练习:
实现一个简单的加法计算器,用户每行输入一个数字,计算所有数字的和(请输入您要的计算的数字,按ctrl+d组合键结束读取)

#!/bin/bash
sum=0
echo "请输入要计算的数字 按crtl+d组合键结束读取:"
while read a
do
	((sum+=a))
done
echo "sum=$sum"

结果:
请输入要计算的数字 按crtl+d组合键结束读取:
1
3
4

6
3
sum=17

==注意:==在终端读取数据,可以等于在文件中读取数据,按下ctrl+d组合键表示读取到文件流的末尾,此时read就会读取失败,得到一个非零的退出状态,从而导致判断条件不成立,结束循环。

2. until循环

  until循环和while循环恰好相反,当判断条件不成立时才进行循环,一旦判断条件成立,就终止循环。until的使用场景很少,一般使用while即可。
shell until循环的用法如下:

until condition
do
statements
done

  condition表示判断条件,statements表示要执行的语句(可以只有一条,也可以有多条),do和done都是shell中的关键字。
  until循环的执行流程为:先对condition进行判断,如果该条件不成立,就进入循环,执行until循环体中的语句(do和done之间的语句),这样就完成了一次循环。每一次执行到done的时候都会重新判断condition是否成立,如果不成立,就进入下一次循环,继续执行循环体中的语句,如果成立,就结束整个until循环,执行done后面的其它shell代码。如果一开始condition就成立,那么程序就不会进入循环体,do和done之间的语句就没有执行的机会。注意:在until循环体中必须有相应的语句使得condition越来越趋近于“成立”,只有这样才能最终退出循环,否则until就成了死循环,会一直执行下去,永无休止。

#!/bin/bash
i=1
sum=0
until ((i>100))
do
	((sum+=i))
	((i++))
done
echo "sum=$sum"

结果:
sum=5050

#!/bin/bash
until [ -z "$1" ]  # -z:用来检测一个变量是否含有数据
do
	echo "$@"
	shift
done

结果:
1 2 3 4 5 6 7 8 9
2 3 4 5 6 7 8 9
3 4 5 6 7 8 9
4 5 6 7 8 9
5 6 7 8 9
6 7 8 9
7 8 9
8 9
9

#!/bin/bash
val1=100
until [ $val1 -eq 0 ]
do
	echo $val1
	val1=$[ $val1 -25 ]
done

结果:
100
75
50
25

发布了106 篇原创文章 · 获赞 1 · 访问量 2353

猜你喜欢

转载自blog.csdn.net/weixin_43384009/article/details/104316007