for循环
for 循环是固定循环,也就是在循环时已经知道需要进行几次循环。有时也把 for 循环称为计数循环。
语法:
for 变量 in 值1 值2 值3… do 程序 done
在这种语法中,for 循环的次数取决于 in 后面值的个数(以空格分隔),有几个值就循环几次,并且每次循环都把值赋予变量。也就是说,假设 in 后面有三个值,for 会循环三次,第一次循环会把值 1 赋予变量,第二次循环会把值 2 赋予变量,以此类推。
示例:打印时间。
[root@localhost ~]# vi sh/for.sh #!/bin/bash 打印时间 for time in morning noon afternoon evening do echo "This time is $time!" done
in 值后面有 4 个字符串,所以这个 for 会循环 4 次。每次循环会依次把字符串赋予变量 time,所以这个脚本会循环 4 次,并依次输出"morning noon afternoon evening"这 4 个字符串。
for ((初始值;循环控制条件;变量变化)) do 程序 done
- 初始值:在循环开始时,需要给某个变量赋予初始值,如 i=1。
- 循环控制条件:用于指定变量循环的次数,如 i<=100,则只要 i 的值小于等于 100,循环就会继续。
- 变量变化:每次循环之后,变量该如何变化,如 i=i+1,代表每次循环之后,变量的值都加 1。
示例:从 1 加到 100
#!/bin/bash #从 1 加到100 s=0 for(( i=1;i<=100;i=i+1)) #定义循环100次 do s=$(($s+$i)) #每次循环给变量s赋值 done echo "The sum of 1+2+..+100 is : $s" #输出从1加到100的和
用函数实现从 1 加到 mun的和:
[root@localhost ~]# vi sh/function.sh #!/bin/bash #接收用户输入的数字,然后从1加到这个数字 function sum () { #定义函数sum s=0 for (( i=0;i<=$1;i=i+1 )) #循环直到i大于$1为止。$1是函数sum的第一个参数 #在函数中也可以使用位置参数变量,不过这里的$1指的是函数的第一个参数 do s=$(( $i+$s )) done echo "The sum of 1+2+3...+$1 is : $s" #输出从1加到$1的和 } read -p "Please input a number: " -t 30 num #接收用户输入的数字,并把值赋予变量num y=$(echo $num 丨 sed 's/[0-9]//g') #把变量num的值替换为空,并赋予变量y if [ -z "$y"] #判断变量y是否为空,以确定变量num中是否为数字 then sum $num #调用sum函数,并把变量num的值作为第一个参数传递给sum函数 else echo "Error!! Please input a number!" #如果变量rmm的值不是数字,则输出报错信息 fi
函数的位置参数变量:$0 代表函数名,$1 代表函数的第 1 参数,$2 代表函数的第 2 个参数,以此类推。
while循环
while 循环和 unti 循环都是条件循环,主要是指循环可以一直进行,直到用户设定的条件达成为止。
while [条件判断式] do 程序 done
#!/bin/bash #从1加到100 i=1 s=0 #给变量i和s赋值 while [$i -le 100] #如果变量的值小于等于100,则执行循环 do s=$(($s+$i)) i=$(($i+1)) done echo "The sum is: $s"
对于 while 循环来讲,只要条件判断式成立,循环就会执行。所以,只要i的值小于等于 100,循环就会继续。每次循环给变量 s 加入变量 i 的值,再给变量加 1,直到变量 i 的值大于 100,循环才会停止。然后输出变量 s 的值,也就是从 1 加到 100 的和。