1 什么是循环
凡是重复执行一段代码, 都可以称之为循环。 循环体中三种专业的话术:遍历、迭代、递归 。
- 遍历(traversal) - 按规则访问非线性结构中的每一项。
- 迭代(iterate) - 按顺序访问线性结构中的每一项。
- 递归(recursion) - 在函数内调用自身, 将复杂情况逐步转化成基本情况。
通常有进入循环的条件和退出循环的条件。
循环次数分为两种:
- 循环次数事先已知
- 循环次数事先未知
常见的循环命令:for, while, until。
2 for循环语句
用法:
- 读取不同的变量值,用来逐个执行同一组命令。
- 使用场景:一般用于循环次数事先已知的场景。
- 执行机制:遍历。
格式:
for 变量名 in 取值列表 do 命令序列 done 复制代码
执行机制:
1.依次将列表中的元素赋值给“变量名”; 每次赋值后即执行一次循环体; 直到列表中的元素耗尽,循环结束。 2.如果省略 [in WORDS ... ] ,此时使用位置参数变量 in "$@" 复制代码
网络异常,图片无法展示
|
2.1 for语句的作用演示
1、打印1到10的三种方法:
#方法一: [root@yuji ~]# for i in {1..10} > do > echo $i > done 1 2 3 4 5 6 7 8 9 10 #方法二: [root@yuji ~]# for i in $(seq 1 10) > do > echo $i > done 1 2 3 4 5 6 7 8 9 10 #方法三: [root@yuji ~]# for ((i=1;i<=10;i++)) > do > echo $i > done 1 2 3 4 5 6 7 8 9 10 复制代码
网络异常,图片无法展示
|
网络异常,图片无法展示
|
2、打印1到10之间的奇数:
[root@yuji ~]# for i in {1..10..2};do echo $i;done //分号可以在一行中执行多条命令 1 3 5 7 9 [root@yuji ~]# for i in $(seq 1 2 10);do echo $i;done 1 3 5 7 9 [root@yuji ~]# for ((i=1;i<=10;i+=2));do echo $i;done 1 3 5 7 9 复制代码
网络异常,图片无法展示
|
3、打印1到10之间的偶数:
[root@yuji ~]# for i in {2..10..2}; do echo $i; done 2 4 6 8 10 [root@yuji ~]# for i in $(seq 2 2 10);do echo $i;done 2 4 6 8 10 [root@yuji ~]# for ((i=2;i<=10;i+=2));do echo $i;done 2 4 6 8 10 复制代码
网络异常,图片无法展示
|
2.2 for循环应用示例
示例1:求从1加到10的和。
创建脚本:
[root@yuji ~]# vim for1.sh //创建脚本 #!/bin/bash #求从1加到10的和。 sum=0 for i in {1..10} do sum=$[sum+i] done echo "求和的结果是$sum" [root@yuji ~]# bash for1.sh //执行脚本 求和的结果是55 复制代码
网络异常,图片无法展示
|
网络异常,图片无法展示
|
示例2:批量添加用户
要求:
- 用户名存放在users.txt文件中,每行一个
- 初始密码均设为123456
创建脚本:
[root@yuji ~]# vim users.txt [root@yuji ~]# cat users.txt liyi lisan liwu liliu [root@yuji ~]# vim for2.sh //创建脚本 #!/bin/bash #批量添加用户,用户名存在放users.txt文件中 #初始密码123456 for user in $(cat /root/users.txt) do useradd $user echo "123456" | passwd --stdin $user done [root@yuji ~]# bash for2.sh //执行脚本 更改用户 liyi 的密码 。 passwd:所有的身份验证令牌已经成功更新。 更改用户 lisan 的密码 。 passwd:所有的身份验证令牌已经成功更新。 更改用户 liwu 的密码 。 passwd:所有的身份验证令牌已经成功更新。 更改用户 liliu 的密码 。 passwd:所有的身份验证令牌已经成功更新。 复制代码
网络异常,图片无法展示
|
网络异常,图片无法展示
|
网络异常,图片无法展示
|
示例3:根据IP地址检查主机状态
要求:
- IP地址存放在ips.txt文件中,每行一个
- 使用ping命令检测各主机的连通性
创建脚本:
[root@yuji /data]# vim ips.txt [root@yuji /data]# cat ips.txt 192.168.72.10 192.168.72.22 192.168.72.129 192.168.72.200 [root@yuji ~]# vim for3.sh //写脚本 #!/bin/bash #IP地址存放在ips.txt文件中,每行一个 #使用ping命令检测各主机的连通性 for host in $(cat /data/ips.txt) do ping -c 3 -i 0.5 -w 4 $host &> /dev/null if [ $? -eq 0 ] then echo "$host is up" else echo "$host is down" fi done [root@yuji ~]# bash for3.sh //运行脚本 192.168.72.10 is down 192.168.72.22 is down 192.168.72.129 is down 192.168.72.200 is down 复制代码
网络异常,图片无法展示
|
网络异常,图片无法展示
|
网络异常,图片无法展示
|