for循环
语法
for 变量名 [ in 取值列表 ]
do
循环体
done
案例1
需求:自动循环创建10个用户
#!/bin/bash
for i in {1..10}
do
unseradd $i
done
for i in $(seq 1 10)
do
unseradd $i
done
for i in `seq 10`
do
unseradd $i
done
案例2
通过循环工具,探测全网主机。将在线主机记录在文本中。
#!/bin/bash
>ip.txt
for i in {2..254}
do
{
ip=192.168.30.$i
ping -c -W $ip $> /dev/null
if [ $? -eq 0 ];then
echo "$ip" | tee -a ip.txt
fi
}&
done
wait
echo "finish"
#在do,done之间加入大括号,&,是加速for循环
案例3
通过用户列表文件创建用户
[root@localhost scripts]# cat user.txt
qianqian
qianfeng
fengfeng
#!/bin/bash
for user in `cat user.txt`
do
useradd $user
echo "$user is created"
done
案例4
使用for实现批量主机root密码的修改
前提1: 已经完成秘钥登录配置(ssh-keygen)
前提2:定义主机地址列表
前提3:并了解远程修改密码的方法
#!/bin/bash
#邀请用户输入新密码
read -p "请用户输入新密码: " password
#循环调用IP地址
for i in $(cat ip.txt)
do
{
#测试IP是否在线
ping -c1 -W1 $i &> /dev/null
#在线IP进行修改
if [ $? -eq 0 ] ;then
#修改密码
ssh $i "echo $password | passwd --stdin root"
#修改成功与否并记录
if [ $? -eq 0 ] ;then
echo "$i" >> ok.txt
else
echo $i >> fail.txt
fi
#不在线的主机记录。
else
echo $i >> meigai.txt
fi
} &
done
while until
语法
特点:循环次数不一定是固定的
while 条件测试
do
循环体
done
==当条件测试成立(条件测试为真),执行循环体
案例1
每秒显示一个数字,一次递增+1
while :
do
let i++
sleep 1
echo $i
done
until语法结构
until语法结构
until 条件测试
do
循环体
done
==当条件测试成立(条件测试为假视为成立),执行循环体
案例2
需求:每个一秒循环一个数字
#!/bin/bash
until [[ $i -eq 14 ]]
do
let i++
sleep 1
echo $i
done