循环
循环是什么
重复执行一段代码的结构。只要满足循环的条件,会一直执行这个代码。
循环条件:在一定范围之内,按照指定的次数来执行循环。
循环体:在指定的次数内执行的命令序列。只要条件满足循环体会被一直执行。
循环和遍历
遍历:对数据结构中每个元素进行一次访问的过程。通常和循环一起使用。
访问的目的就是为了执行特定的操作。
循环是操作
遍历是输出
循环的作用
1、重复执行代码,尤其是统一的,相同的,批量的操作。
2、可以提高代码的重复利用率
3、可以提高人工的效率,减少人工的干预,提高效率
4、可以简化程序的逻辑,降低代码出错的可能性。
for循环
for循环:已知循环次数的场景。
while循环:和for循环可以通用,常用于死循环
until:条件不满足才执行循环,条件满足,不执行。
for循环的格式
格式一:
for 变量名(前面没有$) in 范围 { } do • 命令序列 done 结尾
for i in {1..10} do echo $i done
格式二
类c语言格式
for (( 表达式1;表达式2;表达式3)) do 命令序列 done
for ((i=0;i<=5;i++))
表达式1:定义变量且赋予初始值
表达式2:循环的范围
表达式3:循环的方式,变量每一次自增1
格式三
死循环 for (( ; ;)) do 命令序列 done
实操
#累加求和?1-100一直加,最后结果是多少?用循环来实现 sum=0 for i in {1..100} do sum=$[$sum + $i ] done echo "1-100和"$sum
#自定义输入一个数,然后求从1到该数字的累加?不超过100 read -p "输入一个0-100之间的随机数" a num=0 for ((i=1;i<=a;i++)) do num=$(($num+$i)) done echo $nu
循环控制语句
continue:把执行到continue时,跳出当前循环,但是循环条件依然满足,会执行会序的循环条件。
break:在循环内部,执行到break命令时,会立即跳出当前循环,并终止
#猜数字,输入一个0-100的随机数,这个数由系统生成 #要用死循环写,一直到猜中才停止 a=$[$RANDOM%100+1] for ((;;)) do read -p "输入0-100随机数" b if [[ $a -eq $b ]] then echo "猜对了" break elif [[ $a -gt $b ]] then echo "猜小了" elif [[ $a -lt $b ]] then echo "猜大了" fi done [root@test2 opt]# sh test1.sh 输入0-100随机数50 猜小了 输入0-100随机数20 猜小了 输入0-100随机数80 猜大了 输入0-100随机数70 猜大了 输入0-100随机数60 猜大了 输入0-100随机数55 猜对了 输入0-100随机数
买衣服
作业: 例题:购物 逛淘宝选购商品, 每家商店有五种商品选购(衣服500元,裤子400元,鞋子350元,帽子150元,袜子50元), 每次选购完或不买都会提示用户是否继续逛下一家商店, 如果不再继续逛的话进行购物车结算总额。. #!/bin/bash #每家商店有五种商品选购,每次选购完或不买都会提示用户是否继续逛下一家商店, 如果不再继续逛的话进行购物车结算总额。 #衣服500元 #裤子400元 #鞋子300元 #帽子150元 #袜子50元
a=500 b=400 c=350 d=150 e=50 num=0 read -p "是否进入这家店yes/no" n if [[ "$n" == "yes" ]] then echo "a衣服500 b裤子400 c鞋子350 d帽子150 e袜子50" elif [[ "$n" == "no" ]] then echo "出门" break fi for ((;;)) do read -p "选择你要买的商品a b c d e f " w if [[ $w -eq $a ]] || [[ $w -eq $b ]] || [[ $w -eq $c ]] || [[ $w -eq $d ]] || [[ $w -eq $e ]] then num=$(($num+$w)) echo $num fi if [[ $w -eq $f ]] then echo "结账" fi read -p "是否进入next家店yes/no" n if [[ "$n" == "yes" ]] then echo "a衣服500 b裤子400 c鞋子350 d帽子150 e袜子50" elif [[ "$n" == "no" ]] then echo "出门" break fi done
猴子吃香蕉
某山顶上有一颗香蕉树,一只猴子第一天从树上摘了若干根香蕉,当即就吃了一半,还不过瘾, 又多吃了一根。第二天猴子又将剩下的香蕉吃了一半,禁不住诱惑,又多吃了一根香蕉。 依此类推,每天都将剩余的香蕉吃一半后再多吃一根。到了第十天,猴子发现只剩一根香蕉了, 请问这只猴子在第一天总共摘了多少根香蕉?
a=1 for ((day=10; day>1; day--)) do a=$[ (a + 1) * 2 ] done echo "第一天共摘$a根香蕉"
[root@test2 opt]# sh test2.sh 第一天共摘1534根香蕉