for循环学习(1)

一、循环和遍历

1.1 循环

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

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

循环体:在循环中执行的命令序列,只要条件满足,循环体会被一直执行。

1.2 遍历

遍历指的就是对数据结构中每个元素进行一次访问的过程。通常和循环一起使用。访问的目的就是为了执行特定的操作。

粗略地理解:循环就是操作,遍历就是输出。

1.3 循环的作用

  1. 重复执行代码,尤其是统一的,相同的,批量的操作。
  2. 提高代码的重复利用率。
  3. 提高人工的效率,减少人工干预。
  4. 简化程序的逻辑,降低代码出错的可能性。

1.4 几种循环方式

  • for循环:使用场景,一般用于已知循环次数的场景。

  • while循环:和for循环可以互相替换,常用于死循环。

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

二、for循环

2.1 for循环的几种格式

2.1.1 格式1
bash 复制代码
for 变量名称(不需要$) in 范围 {}
do
	命令序列
done

例:

bash 复制代码
for i in {1..10}
do
 echo $i
done
# 执行该文件会打印 1 到 10

例:

创建一个文件/opt/passwd.txt

在文件中创建三行:test1,test2,test3

使用循环创建这三个用户,统一设定密码为123456

bash 复制代码
vim l1.sh
for user in $(cat /opt/passwd.txt)
do
 useradd $user
 echo 123456 | passwd --stdin $user
done

sh l1.sh 
Changing password for user test1.
passwd: all authentication tokens updated successfully.
Changing password for user test2.
passwd: all authentication tokens updated successfully.
Changing password for user test3.
passwd: all authentication tokens updated successfully.
2.1.2 格式2

类C语言格式:

bash 复制代码
for ((表达式1;表达式2;表达式3))
do
	命令序列
done

例:

bash 复制代码
for ((i=0;i<5;i++))

表达式1:定义变量并赋予初始值,i=0;

表达式2:循环的范围

表达式3:循环的方式,变量每次自增1

bash 复制代码
例:1到100,求和
vim l2.sh
sum=0
for i in {1..100}
do
 sum=$(($sum+i))
done
echo $sum 

[root@test1 lesson2]# sh l2.sh 
5050
bash 复制代码
例:分别求1到100的奇数和,偶数和
vim l3.sh
sum1=0
sum2=0
for i in {1..100}
do
if [ $(($i%2)) -eq 0 ]
then
 sum1=$(($sum1+$i))
else
 sum2=$(($sum2+$i))
fi
done
echo "偶数和"$sum1 
echo "奇数和"$sum2 

sh l3.sh 
偶数和2550
奇数和2500
bash 复制代码
例:自定义输入一个数,然后求从1到该数字的累加和
vim l4.sh
read -p "输入一个数.范围1-100:" num
sum=0
for ((i=1;i<=$num;i++))
do
 sum=$(($sum+$i))
done
echo $sum
sh l4.sh 
输入一个数.范围1-100:10
sh l4.sh 
输入一个数.范围1-100:100
5050
2.1.3 格式3

死循环:会一直循环

bash 复制代码
for ((;;))
do
	命令序列
done

break

在循环内部,执行到break命令时,会立即跳出当前循环,并终止

continue

在循环内部,当执行到continue,跳出当前循环,如果后续条件依然满足,会继续进行

死循环的应用

例:猜数字,输入一个1-100的随机数,这个随机数由系统生成,每次猜提示猜大了还是猜小了,猜中则提示猜中了,并统计一共猜了多少次。

用死循环,一直到用户猜中为止,猜中了循环才会终止

随机数生成用变量$RANDOM,随机数范围0-32767

需要取0-99的随机数 ,只要用$RANDOM%100除以100的余数再加1即可实现。

bash 复制代码
vim l5.sh
ran=$((RANDOM%100+1))
count=0
for ((;;))
do
read -p "请输入数字,1-100:" num
let count++
if [ $num -gt $ran ]
then
 echo "猜大了"
elif [ $num -lt $ran ]
then
 echo "猜小了"
elif [ $num -eq $ran ]
then
 echo "猜中了,猜了$count次"
 break
fi
done

解释: let t++,即让变量count每次循环自增一。

2.2 练习

  1. 购物例题:

    逛淘宝选购商品,每家商店有五种商品选购(衣服500元,裤子400元,鞋子350元,帽子150元,袜子50元),每次选购完或不买都会提示用户是否继续逛下一家商店,

    如果不再继续逛的话进行购物车结算总额。

    vim shopping.sh

    bash 复制代码
    sum=0
    for ((;;))
    do
    echo "欢迎光临本店!本店商品价格:"
    echo "衣服500元,裤子400元,鞋子350元,帽子150元,袜子50元"
     read -p "输入要买的商品{1.衣服|2.裤子|3.鞋子|4.帽子|5.袜子|6.不想要了}" item
     case $item in
     "1")
     cost=500
     ;;
     "2")
     cost=400
     ;;
     "3")
     cost=350
     ;;
     "4")
     cost=150
     ;;
     "5")
     cost=50
     ;;
     "6")
     cost=0
     ;;
     *)
     cost=0
     echo "输入错误,请重试"
     esac
     sum=$(($sum+$cost))
     
     read -p "是否要继续购买?1.继续|2.离开:" s1
     if [ $s1 -eq 1 ]
     then
     continue
     elif [ $s1 -eq 2 ]
     then
     read -p "是否继续逛下一家商店?1.继续|2.离开:" s2
      if [[ $s2 -eq 1 ]]
      then
      continue
      elif [[ $s2 -eq 2 ]]
      then
      echo "当前购物车总额:${sum}元"
      break  
      else                                                                                              
      echo "输入错误,请重试" 
      fi
     else
     echo "输入错误,请重试" 
     fi 
    done
    bash 复制代码
    sh shopping.sh 
    欢迎光临本店!本店商品价格:
    衣服500元,裤子400元,鞋子350元,帽子150元,袜子50元
    输入要买的商品{1.衣服|2.裤子|3.鞋子|4.帽子|5.袜子|6.不想要了}1
    是否要继续购买?1.继续|2.离开:1
    欢迎光临本店!本店商品价格:
    衣服500元,裤子400元,鞋子350元,帽子150元,袜子50元
    输入要买的商品{1.衣服|2.裤子|3.鞋子|4.帽子|5.袜子|6.不想要了}5
    是否要继续购买?1.继续|2.离开:2
    是否继续逛下一家商店?1.继续|2.离开:2
    当前购物车总额:550 元
  2. 某山顶上有一颗香蕉树,一只猴子第一天从树上摘了若干根香蕉,当即就吃了一半,还不过瘾,又多吃了一根。第二天猴子又将剩下的香蕉吃了一半,禁不住诱惑,又多吃了一根香蕉。

    依此类推,每天都将剩余的香蕉吃一半后再多吃一根。到了第十天,猴子发现只剩一根香蕉了,

    请问这只猴子在第一天总共摘了多少根香蕉?

    vim monkey.sh

    bash 复制代码
    sum=1
    for ((i=9;i>=1;i--))
    do
    sum=$((($sum+1)*2))
    echo "第${i}天开始时有${sum}根香蕉"
    done
    bash 复制代码
    sh monkey.sh 
    第9天开始时有4根香蕉
    第8天开始时有10根香蕉
    第7天开始时有22根香蕉
    第6天开始时有46根香蕉
    第5天开始时有94根香蕉
    第4天开始时有190根香蕉
    第3天开始时有382根香蕉
    第2天开始时有766根香蕉
    第1天开始时有1534根香蕉
相关推荐
许白掰1 小时前
Linux入门篇学习——Linux 工具之 make 工具和 makefile 文件
linux·运维·服务器·前端·学习·编辑器
longze_75 小时前
Ubuntu连接不上网络问题(Network is unreachable)
linux·服务器·ubuntu
Dirschs5 小时前
【Ubuntu22.04安装ROS Noetic】
linux·ubuntu·ros
qianshanxue115 小时前
ubuntu 操作记录
linux
AmosTian8 小时前
【系统与工具】Linux——Linux简介、安装、简单使用
linux·运维·服务器
这我可不懂10 小时前
Python 项目快速部署到 Linux 服务器基础教程
linux·服务器·python
车车不吃香菇11 小时前
java idea 本地debug linux服务
java·linux·intellij-idea
tan77º11 小时前
【Linux网络编程】Socket - TCP
linux·网络·c++·tcp/ip
kfepiza12 小时前
Linux的`if test`和`if [ ]中括号`的取反语法比较 笔记250709
linux·服务器·笔记·bash
CodeWithMe12 小时前
【Note】《深入理解Linux内核》 第十九章:深入理解 Linux 进程通信机制
linux·运维·php