for循环语句

一、循环概念

1、概念

循环是一种重复执行一段代码的结构。只要满足循环的条件,会一直执行这个代码

2、循环条件

在一定范围之内,按照指定的次数来执行循环。

3、循环体

在指定的次数内,执行的命令序列。只要条件满足,循环体会被一直执行。

4、循环和遍历

遍历指对数据结构中每个元素进行一个访问的过程。通常和循环一起使用。

访问的目的就是为了执行特定的操作。

循环是操作,遍历是输出。

5、循环的作用

5.1 重复执行代码,尤其是统一的、相同的、批量的操作

5.2 提高代码的重复利用率

5.3 提高人工的效率,减少人工的干预,效率变高

5.4 简化程序的逻辑,降低代码出错的可能性

二、循环的语法

(一)循环适用条件

for循环:用于已知循环次数的场景

while循环:和for循环可以通用,长用于死循环

until:条件不满足才执行循环。

(二)循环格式

1、for循环格式

格式1
for i in {}
do 
   命令序列
done
#for 变量名称(前面没有$) in  范围 {}

例子1
# 创建 vim test1.sh
for i in {1..10}
do
 echo $i 
done
# 验证 sh test1.sh 
#现在要求创建一个文件passwd.txt
#在这个文件中创建三行,xy101 xy 102 xy103
#使用循环创建这三个用户,统一设定密码为123456
#创建 vim passwd.txt
xy101
xy102
xy103
# 创建 vim test2.sh
for user in $(cat /opt/passwd.txt)
do
 useradd $user
 echo 123456 | passwd --stdin $user
done
# 验证 sh test2.sh
#如何实现累加求和?1~100一直相加,最后的结果是多少?用循环来实现?
# 创建 vim test4.sh
sum=0
for i in {1..100}
do
sum=$(($sum+$i))
done
 echo $sum
# 验证 sh test4.sh

#如何实现累加求和?1~100一直相加,最后的结果是多少?用循环来实现?
#分别求出奇数和、偶数和
sum1=0
sum2=0
for i in {1..100}
do
if [[ $i%2 -eq 0 ]]
sum1=$(($sum1+$i))
else
sum2=$(($sum2+$i))
fi
done
 echo $sum1
 echo $sum2
类c语言格式
#类c语言格式:
for((表达式1;表达式2;表达式3))
do
 命令序列
for((i=0;i<=5;i++))
表达式1:定义变量并且赋予初始值
表达式2:循环范围
表达式3:循环的方式,变量每一次自增1

# 创建 vim test3.sh
for((i=0;i<=5;i++))
do
 echo $i
done
# 验证 sh test3.sh
#自定义输入一个数,然后求从1到该数字的累加和?不要超过100.
# 创建 vim test5.sh
read -p "输入一个0~100之间的随机数" num
sum=0
for((i=0;i<=$num;i++))
do
sum=$(($sum+$i))
done
 echo $sum
# 验证 sh test5.sh
死循环
#死循环:
for((;;))
do
 命令序列
done

2、break和continue

break:在循环内部,执行到break命令时,会立即跳出当前循环,并终止
continue:执行到continue,跳出当前循环,但是如果循环条件依然满足,会继续后续执行循环条件

# 猜数字 输入一个0~10的随机数,这个数由系统随机生成
# 创建 vim test7.sh
for i in {1..10}
do
 if [ $i -eq 3 ]
  then
   break
 fi
echo $i
done
# 验证 sh test7.sh
# break 结果只显示1 2
# continue 结果显示1 2 4 5 6 7 8 9 10

3、$RANDOM

$RANDOM 0~32767
# linux中shell随机生成的变量,可随机生成整数
命令行中
0~32767
# 输入a=$RANDOM 
# 再输入echo $a 即随机生产0~32767内的随机数字
0~100
# 输入a=$((RANDOM%100)) 
# 再输入echo $a 即随机生产0~100内的随机数字
0~10
# 输入a=$((RANDOM%10)) 
# 再输入echo $a 即随机生产0~10内的随机数字
0~100包含100
# 输入a=$((RANDOM%100+1)) 
# 再输入echo $a 即随机生产0~100的随机数字
# 猜数字,输入一个0~100的随机数,这个随机数由系统生成
#死循环,一直到用户猜中为止,猜中了循环才会终止
#$RANDOM 0~32767 
# 循环控制语句 continue break
#猜大了,提示用户猜大了,猜小了,提示用户猜小了,猜对了,终止循环,并提示用户你猜对了!

num=$((RANDOM%100+1))
for ((;;))
do
read -p "请输入一个数字" user
 if [ $num -eq $user ]
 then
  echo "你猜对了!"
  break
elif [ $user -gt $num ]
then
 echo "猜大了"
elif [ $user -lt $num ]
then
 echo "猜小了"
fi
done

#猜几次猜对了
time=0
num=$((RANDOM%100+1))
for ((;;))
do
read -p "请输入一个数字" user
 if [ $num -eq $user ]
 then
  echo "你猜对了!一共猜了$time次"
  break
elif [ $user -gt $num ]
then
 echo "猜大了"
elif [ $user -lt $num ]
then
 echo "猜小了"
fi
done

需求1:淘宝购物

逛淘宝选购商品,每家商店有五种商品选购(衣服500元,裤子400元,鞋子350元,帽子150元,袜子50元),每次选购完或不买都会提示用户是否继续逛下一家商店,如果不再继续逛的话进行购物车结算总额。

num=o
for((;;))
do
echo "衣服500元,裤子400元,鞋子350元,帽子150元,袜子50元"
echo "购买衣服输入1,购买裤子输入2,购买鞋子输入3,购买帽子输入4,购买袜子输入5,不选购输入6"
read -p "请开始购物" a
case $a in
1)
 echo "$a,已选购一件袜子50元"
 num=$(($num+50))
;;
2)
 echo "$a,选购一件帽子150元"
 num=$(($num+150))
;;
3)
 echo "$a,选购一件鞋子350元"
 num=$(($num+350))
;;
4)
 echo "$a,选购一条裤子400元"
 num=$(($num+400))
;;
5)
 echo "$a,选购一件衣服500元"
 num=$(($num+500))
;;
6)
 echo "$a,未选购商品"
 num=$(($num+0))
;;
*)
 echo "输入不正确!"
esac
read -p "是否继续购买(yes/no):" mai
if [ $mai == yes ]
 then
   continue
 elif [ $mai == no ]
 then
    echo $num 
    break
fi
done

验证:

!在这里插入图片描述

需求2:

某山顶上有一颗香蕉树,一只猴子第一天从树上摘了若干根香蕉,当即就吃了一半,还不过瘾,
又多吃了一根。第二天猴子又将剩下的香蕉吃了一半,禁不住诱惑,又多吃了一根香蕉。
依此类推,每天都将剩余的香蕉吃一半后再多吃一根。到了第十天,猴子发现只剩一根香蕉了,
请问这只猴子在第一天总共摘了多少根香蕉?

sum=1
for((i=9;i>=1;i--))
do
sum=$((($sum+1)*2))
echo "第${i}天开始时有${sum}根香蕉"
done
sum=1
for i in {1..9}
sum=$(($sum+1))
sum=$(($sum*2))
done
echo $sum

验证:

在这里插入图片描述

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值