2.4.2 for循环案例
学习目标
这一节,我们从 普通循环、赋值循环、小结 三个方面来学习。
普通循环
简介
所谓的普通循环,仅仅是在特定的范围循环中,对相关命令进行重复性的操作
批量实践1- 批量创建多个使用随机密码的用户
查看脚本内容
[root@localhost ~]# cat for_add_user.sh
#!/bin/bash
# 功能:for批量创建用户
# 提示:
# /dev/random和/dev/urandom设备文件会生成随机数,第一个依赖系统中断
# 定制普通变量
user_file='/tmp/user.txt'
# 保证文件可用
[ -f ${user_file} ] && > ${user_file}
# 定制批量创建用户的业务逻辑
for i in {1..5}
do
# 创建用户
useradd user-$i
# 生成密码
password=$(head /dev/urandom | tr -dc '[:alnum:]' | head -c 8)
# 为用户添加密码
echo ${password} | passwd --stdin user-$i > /dev/null 2>&1
# 信息输出
echo "用户: user-$i, 密码: ${password}" >> ${user_file}
echo -e "\e[31m用户 user-$i 创建成功\e[0m"
done
脚本执行后效果
[root@localhost ~]# /bin/bash for_add_user.sh
用户 user-1 创建成功
用户 user-2 创建成功
用户 user-3 创建成功
用户 user-4 创建成功
用户 user-5 创建成功
[root@localhost ~]# cat /tmp/user.txt
用户: user-1, 密码: 6eiNoy6i
用户: user-2, 密码: rWZ0VoIl
用户: user-3, 密码: i2MSnjls
用户: user-4, 密码: 9wzLjU7z
用户: user-5, 密码: U8a3Cj3R
清理环境
[root@localhost ~]# for i in {1..5};do userdel -r user-$i;done
[root@localhost ~]# grep user- /etc/passwd
批量实践2- 批量对特定网段的主机进行扫描
查看脚本内容
[root@localhost ~]# cat for_host_check.sh
#!/bin/bash
# 功能:for批量检测网段主机存活情况
# 定制普通变量
netsub='10.0.0'
net_file='/tmp/host.txt'
# 保证文件可用
[ -f ${net_file} ] && > ${net_file}
# 定制批量检测网段主机状态逻辑
for ip in {1..254}
do
# 测试主机连通性
host_status=$(ping -c1 -W1 $netsub.$ip >/dev/null 2>&1 && echo "UP" || echo "DOWN")
echo "$netsub.$ip 主机状态: $host_status" >> ${net_file}
done
# 信息输出
live_num=$(grep UP ${net_file} | wc -l)
unlive_num=$(grep DOWN ${net_file} | wc -l)
echo -e "\e[31m${netsub}.0 网段主机存活情况\e[0m"
echo "------------------------------------"
echo -e "\e[32m${netsub}.0 网段存活主机数量: ${live_num}\e[0m"
echo -e "\e[32m${netsub}.0 网段异常主机数量: ${unlive_num}\e[0m"
脚本执行效果
[root@localhost ~]# /bin/bash for_host_check.sh
10.0.0.0 网段主机存活情况
------------------------------------
10.0.0.0 网段存活主机数量: 2
10.0.0.0 网段异常主机数量: 252
[root@localhost ~]# grep UP /tmp/host.txt
10.0.0.2 主机状态: UP
10.0.0.12 主机状态: UP
赋值循环
简介
所谓的赋值循环,指的是在for循环过程中进行数据的统计等相关计算操作
统计实践1- 计算1+2+…+100 的结果
查看脚本内容
[root@localhost ~]# cat for_odd_num.sh
#!/bin/bash
# 功能:for统计数据之和
# 定制普通变量
all_sum=0
odd_sum=0
# 定制所有数据求和逻辑
for i in {1..100}
do
let all_sum+=i
done
# 定制所有奇数求和逻辑
for i in {1..100..2}
do
let odd_sum+=i
done
# 信息输出
echo -e "\e[31m所有数据之和: ${all_sum}\e[0m"
echo -e "\e[31m所有奇数之和: ${odd_sum}\e[0m"
脚本执行后效果
[root@localhost ~]# /bin/bash for_odd_sum.sh
所有数据之和: 5050
所有奇数之和: 2500