shell脚本循环语句

循环语句

1.for循环

在实际工作中,经常会遇到某项任务需要多次执行的情况,而每次执行时仅仅是处理的 对象不一样,其他命令相同。例如,根据通讯录中的姓名列表创建系统账号,根据服务器清 单检查各主机的存活状态
当面对各种列表重复任务时,使用简单的 if 语句已经难以满足要求,而顺序编写全部代 码更是显得异常烦琐、困难重重

for循环语句

语法结构
(1)列表循环
(2)不带列表循环
(3)类C风格的for循环

(1)列表循环

遍历
for 变量名 in {list}
do
command
done

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rPLAbjoy-1656666224122)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20220701140447006.png)]

可以发现我没有用#!/bin/bash ,也执行成功了

image-20220701141010202

image-20220701141402079

image-20220701141523066

image-20220701141735249

i这里实际没有调用,所以就相当于in后面几个参数就循环几次

image-20220701141927973

案例:

输出0-50之间的偶数

image-20220701142223493

附小技巧:花括号{}和seq在for循环的应用:

for i in {1…50…2} 1-50的奇数

for i in {2…50…2} 1-50的偶数

for i in {10…1} 1-10倒序排列

for i in $(seq 10) 1-10正序排列

for i in $(seq 10 -1 1) 1-10倒序排列

for i in $(seq 1 2 10) 1-10的奇数,中间为步长

for i in $(seq 0 2 10) 1-10的偶数,中间为步长
例子
for i in $(seq 0 2 10);do echo $i ;done

(2)不带列表循环

不带列表循环执行时由用户指定参数和参数的个数决定的

for 变量名
do
command
done

例;打印hello

image-20220701143017751

(3)类C风格的for循环

for ((expr1;expr2;expr3))
do
command
done

expr1:定义变量并赋初值
expr2:决定是否循环
expr3:决定循环变量如何改变,决定循环什么时候退出

例1:打印1-5

迭代

image-20220701145413503

注:i++ : i=1+1 先赋值再运算 i=1 之后 再 +1
++i : 1+1=i 先运算再赋值 1+1 之后 再=i

例2:打印1-10的奇数

image-20220701145605044

附2:类C风格运算符用法
++ 自身变量+1
– 自身变量-1
+=5 自身变量+5
-=5 自身变量-5
=5 自身变量5
/=5 自身变量/5
%=5 自身变量%5

例3:计算1-100的奇数和

image-20220701145912318

案例

#现在有个抽奖箱,里面放了3位数字,每次取一个数字,查看对应id的人名 ,然后记录次数+1,并且取完之后,将数字丢回抽奖
箱,再次进行抽取,再次记录id对应的人名,并记录次数+1 ,反复10次,最后统计每个人次数

image-20220701150728111

image-20220701150811084

2.while循环

1、语法结构

2、死循环

(1)语法结构(3种)

  • while循环一般用于有条件判断的循环,若判断条件为真,则进入循环,当条件为假就跳出循环
2.1语法结构

while 表达式
do
command
done

例1:打印1-5

image-20220701151612919

例2:输出1-100之间不能被3整除的数字

image-20220701151917190

image-20220701151930162

例3:打印1-100的和

image-20220701152531564

2.2while死循环
  • while [ 1 -eq 1 ] //写一个永远为真的表达式,1等于1这个条件永远为真,所以这个脚本会一直循环下去
    do
    command
    done

  • while true
    do
    command
    done

  • while :
    do
    command
    done

例1:猜数字,猜不对就一直猜

image-20220701153415199

例2:猜商品价格游戏
$random用于生成0—32767的随机数

第一种方法

image-20220701160751962

image-20220701160908499

第二种方法

image-20220701161032084

发现报错

image-20220701161356208

解决:

image-20220701161516963

案例:

需求1:首先要求有5家店,每家店 4个商品(衣服200,鞋子150,手套40,裤子155),然后要求以交互式的方式,让用户选择进入哪家店,并且选择哪个商品

image-20220701162029941

image-20220701162040342

image-20220701162106217

image-20220701162132936

3.Until循环

跟while相反,条件为假进入循环,条件为真退出循环

语法结构
until 表达式
do
command
done

例1:计算1-50的和1275两种写法

第一种

image-20220701162437984

第二种

image-20220701162725692

死循环结构
until false
do
command
done

until [ 1 -ne 1 ]
do
command
done

4.循环控制语句

for循环一般会搭配条件判断语句和流程控制语句一起执行,那么就会出现需要跳过循环和中止循环的情况,控制循环的命令有以下3个

1、continue

继续,但不会执行循环体内下面的代码了,开始重新开始下一次循环

例1:打印1-5的数字,3不打印

image-20220701163120214

2、break

打断,马上停止本次循环,执行循环体外的代码

例2:1-10的数字,7后面的都不打印

image-20220701163301641

3、exit

直接跳出程序,后面可跟状态返回码如exit 1等等

image-20220701163419374

直接跳出程序所以不会执行最后的echo hi,并且返回码是100通过$?查看

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值