今天给伙伴们分享一下Shell 编程-Shell 循环结构,希望看了有所收获。
我是公众号「想吃西红柿」「云原生运维实战派」作者,对云原生运维感兴趣,也保持时刻学习,后续会分享工作中用到的运维技术,在运维的路上得到支持和共同进步!
如果伙伴们看了文档觉得有用,欢迎大家关注我的公众号,获取相关文档。爱运维,爱生活。
一、Shell 循环 for 语句
-
for循环的运作方式,是讲串行的元素意义取出,依序放入指定的变量中,然后重复执行含括的命令区域(在do和done 之间),直到所有元素取尽为止。
-
其中,串行是一些字符串的组合,彼此用$IFS所定义的分隔符(如空格符)隔开,这些字符串称为字段。
1、for 循环的语法结构
for 变量名 in 值集合
do
执行命令
done
2、for 语法说明
- for 每次从值集合中取一个值赋值给变量
- do - done 将赋值后的变量带入执行的命令得到执行结果 ,
- 重复以上两个步骤,直到值集合中的值被一一获取赋值给变量的到所有结果,循环结束
3、实例
1、用 for 循环创建 demo1-demo10,然后在 demo1-demo10 创建 test1-test10 的目录
#!/bin/bash
for a in {
1..10}
do
/usr/bin/mkdir -p /datas/demo$a
cd /datas/demo$a
for b in {
1..10}
do
/usr/bin/mkdir -p test$b
done
done
#!/bin/bash
for k in $( seq 1 2 10 ) # seq a b 用于产生从 a 到 b 之间的所有整数 seq 起始值 步长 结束值
do
mkdir /root/demo${k}
cd /root/demo${k}
for l in $( seq 1 2 10 )
do
mkdir test${l}
cd /root/demo${k}
done
cd ..
done
2、列出 var 目录下各子目录占用磁盘空间的大小
#!/bin/bash
DIR="/var"
cd $DIR
for k in $(ls $DIR) # 对/var目录中每一个文件,进行for循环处理
do
[ -d $k ] && du -sh $k # 如果/var下的文件是目录,则使用du -sh计算该目录占用磁盘空间的大小
done
作业练习
1:扫描192.168.31.1-15之间哪个主机是在线的 能ping up 不能 down
2、for批量创建用户并设置密码 user1-user10 设置密码 高端就是随机密码 随机密码输出到一个文件对应用户, 低端固定密码 1234.com
3、100 以内的数字求合
4、用*排列输出倒立直角三角形,整直角,平行四边形,梯形,等腰三角形,菱形
代码示例
扫描二维码关注公众号,回复:
17446807 查看本文章

[root@CentOS7-9-06 t1]# bash test8.sh
输入打印三角的行数 9
********
*******
******
*****
****
***
**
*
[root@CentOS7-9-06 t1]# cat test8.sh
#!/bin/bash
read -p "输入打印三角的行数" p
for ((i=1;i<=$p;i++))
do
for ((o=$i;o<$p;o++))
do
echo -n "*"
done
echo ""
done
二、Shell 循环 while 语句
1、while 循环语法结构
while 条件测试
do
执行命令
done
2、while 语法说明
-
while 首先进行条件测试,如果传回值为0(条件测试为真),则进入循环,执行命令区域,否则不进入循环
-
满足 while 测试条件,执行命令区域,直到 while 的测试条件不满足结束执行while循环(如果条件一直满足执行无穷循环)。
3、实例1 while 循环读取文件的内容
#!/bin/bash
while read a # 使用read有标准输入读取数据,赋值变量 demo 中,如果读到的数据非空,就进入循环,显示读取到的内容
do
echo $a
done < /datas/6files
cat /datas/6files
111
222
333
#!/bin/bash
while read demo
do
echo ${demo}
done < /home/scripts/testfile # 将 /home/scripts/testfile 的内容按行输入给 read 读取
read -p 'aaaa:' str
4、实例2 while 条件测试
#!/bin/bash
declare -i i=1 # 声明设置 i 和 sum为整数型
declare -i sum=0