SHELL的for循环和while循环

本文详细介绍了Shell脚本中的for和while循环。for循环包括两种语法格式,适用于减少代码冗余和重复。文中给出了多个示例,如循环创建系统账户和9*9乘法表的实现。while循环作为条件式循环,适合非固定次数的循环,同样配有几个实例,如死循环和批量创建用户。总结中强调了for循环适用于固定次数,while循环适用于非固定次数的场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


一、for循环

for循环的主要目的就是减少代码的冗余和重复
● for循环的语法格式
● 根据变量的不同取值,重复执行命令序列
♦ for 变量 in 值列表
do
命令序列
done

♦ for((初值;条件;步长))
do
命令序列
done

示例1:for循环

#!/bin/bash
#"i"作为一个变量,in后面的是值列表
for i in a b c d e f g

do

  echo "hello $i"

done

在这里插入图片描述

示例2:for循环2

#!/bin/bash

for ((i=1;i<=6;i++))

do

  echo "hello $i"

done

在这里插入图片描述

示例3:循环创建10个系统账户

#!/bin/bash

for i in {1..10}

do
  useradd a$i
  echo 123123 |passwd --stdin a$i
done
~

在这里插入图片描述

示例4:批量创建系统账户

♦ 先创建一个用户名列表users.txt文件,读取用户名列表文件创建账户
在这里插入图片描述

#!/bin/bash
#使用cat查看用户文件,但是并不要cat这个单词,而是这个命令执行的结果,所以这里用$()
#这里cat命令会将1.txt文件中所有的用户名取出来
for i in $(cat /root/123/1.txt)

do
  useradd "$i"
  echo "123123" | passwd --stdin "$i"

done

在这里插入图片描述

示例5:for循环的嵌套(9*9乘法表)

思路:9*9乘法表的规律

1*1=1
2*1=22*2=4
3*1=33*2=63*3=9
4*1=44*2=84*3=124*4=16
5*1=55*2=105*3=155*4=205*5=25
6*1=66*2=126*3=186*4=246*5=306*6=36
7*1=77*2=147*3=217*4=287*5=357*6=427*7=49
8*1=88*2=168*3=248*4=328*5=408*6=488*7=568*8=64
9*1=99*2=189*3=279*4=369*5=459*6=549*7=639*8=729*9=81

首先,99乘法表是有9行,第一行是1的乘法,第二行是2的乘法,以此类推,第九行是9的乘法,
其次,9
9乘法表有若干列,第一行是1列,第二行是2列,以此类推,第九行是9列
这里的规律就是他的列数要小于等于行数,假设行数为七的时候,列数不能大于7,它必须小于等于7
9*9乘法表是有两个数字相乘,在这个脚本中用i代表一个数字,同时代表的是行,就是计算左边的数字,使用a代表另外个数字,同时代表列,就是计算的右边的数字
从上面的表格可以看到,右边的数字是小于等于左边的数字

#!/bin/bash
#先做for循环i=1,i<=9,每循环一次i++
#第一步,当i=1的时候,它就会进到do和done里面把里面命令执行一遍,
#第三步,当第二步循环结束后此时并没有结束,i只做了第一次循环,此时i++变成2,再次进到do和done之间进行第二次循环
#第五步,以此类推,当i的值大于9的时候,循环结束
for ((i=1;i<=9;i++))
do
#又嵌套一个for循环,这个for循环变量是a,a初始值为1,a永远要小于等于i的值,然后a++
#第二步,当i=1,此时a=1,1>=i,显示1*1=1,然后a++之后,a=2,此时a>1,循环结束,结束后回到上一个循环
#第四步,当i=2,此时进入嵌套内的又一个for,a=1的循环,再次执行a=1,此时1<=2,显示2*1=2,然后a++后,a=2,此时a依然<=2,显示2*2=4,然后后再次a++,此时a=3,3大于2,循环结束,回到上亿循环
  for ((a=1;a<=i;a++))
  do
#echo -n 的命令是不换行
#同时注意,这里方括号后面的"之前需要加一个空格,否则两个结果会连载一起
    echo -n "$i*$a=$[i*a] "
  done
#在a循环的结束之后,打echo,不输出任何信息,默认就是一个回车
  echo
done

在这里插入图片描述
下面有一些脚本中代码不完全的图片
在这里插入图片描述

for小结

♦ for循环基本语法
for 变量 in 值列表
for ((变量初值;判断条件;步长))
无论什么样的for循环,最核心点的就是掌握语法结格式
for循环的两种格式,一种是for变量,然后通过in对值列表取值,
第二种是for先给变量赋初值,然后判断循环是否满足执行条件,只要满足条件就一直会循环下去,直到条件不满足时,循环结束
每次循环结束,变量会自增自减,每变化一次就判断条件,条件成功,就循环,直到最后条件不成功时候,循环结束

二、while循环

语法结构及特点
● 条件式循环
♦ 反复测试条件,只要能成立就执行
while 条件测试
do
命令序列
done

这里如果条件测试为真,就执行do和done之间的命令序列,不仅是执行命令序列,在执行完后,整个语句会返回到while再次判断条件测试,如果条件测试为真,则继续执行do和done之间的命令,并且在执行完之后再次返回,再次判断条件测试是否为真,以此类推,如果这个条件测试一直为真,那么命令序列就会一直反复执行,直到有次判断条件为假的时候循环结束

示例1:死循环

#!/bin/bash
#首先先设置一个变量i=1
i=1
#while判断,$i是否小于等于10,i定义的变量是1,1肯定是小于10的,所以条件成立,
while [ $i -le 10 ]
#条件成立则就会执行do和done之间的命令
do
#这里$i,i=1,也就会显示1,当执行完之后,会再返回while判断,
  echo $i
done
#因为设置的变量永远等于1,1永远都小于等于5.所以这个循环永远不会结束

在这里插入图片描述
根据上图可以看到该脚本执行后会无限循环输出1,直至CTRL+C
扩展:如果真的要写一个死循环的脚本的话可以用以下格式

#!bin/bash
#while后面跟冒号这种,冒号后面永远为真
while :
do
  echo a
done

示例2:while循环

#!/bin/bash
#首先先设置一个变量i=1
i=1
#while判断,$i是否小于等于10,i定义的变量是1,1肯定是小于10的,所以条件成立,
#当i=2时,2小于10,所以条件成立,一次类推,直至i=11,此时11大于10,条件不成立,循环结束
while [ $i -le 10 ]
#条件成立则就会执行do和done之间的命令
do
#这里$i,i=1,也就会显示1,当执行完之后,会再返回while判断,
  echo $i
#这里let i++,i就会自加1,就变成了2,再返回while判断,
  let i++
done

在这里插入图片描述

示例3:while循环批量创建用户

#!/bin/bash
#定义两个变量,a是前缀,i是后缀
a=b
i=1
#循环判断i是否小于等于6,如果i<=6则执行命令
while [ $i -le 6 ]
do
  useradd $a$i
  echo "123123" | passwd --stdin $a$i &>/dev/null
  let i++
done
~

在这里插入图片描述
根据图片可以看到,运行脚本后批量创建了b1-b6用户

示例4:猜数字while循环

#!/bin/bash
#用RANDOM做一个1-100之间的随机数字定义为"num"
num=$[RANDOM%100+1]
#while:做一个死循环
while :
do
  read -p "请输入1-100的整数:" x
  if [ $x -eq $num ];then
    echo "恭喜你,猜对了,就是$num"
#因为是做了一个死循环,所以这里有一个exit,只要你猜对了,就会执行退出,如果猜不对,就会>进入下面的命令,直至猜对
    exit
  elif [ $x -le $num ];then
    echo "猜小了"
  else
    echo "猜大了"
  fi
done


在这里插入图片描述

小结

● for一般用于固定次数循环
● while一般用于非固定次数循环

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值