05.Shell循环语句
徐亮伟, 江湖人称标杆徐。多年互联网运维工作经验,曾负责过大规模集群架构自动化运维管理工作。擅长Web集群架构与自动化运维,曾负责国内某大型电商运维工作。
个人博客"徐亮伟架构师之路"累计受益数万人。
笔者Q:552408925、572891887
架构师群:471443208
1.For循环语句
1.for
循环基础语法
for 变量名 in [ 取值列表 ]
do
循环体
done
2.for
案例, 批量探测主机存活状态
# cat for_ip.sh
#循环主机
for i in {1..254}
do
#并发执行
{
ip=192.168.70.$i
ping -c1 -W1 $ip &>/dev/null
if [ $? -eq 0 ];then
echo "$ip" |tee -a ip.txt
fi
}&
done
#等待前台进程结束,在往后执行
wait
echo "Get IP Is Finsh!!"
4.for
循环批量创建用户
#!/usr/bin/bash
read -p "请输入用户名前缀|密码|数量: " rep pass num
if [[ ! $num =~ ^[0-9]+$ ]];then
echo "Error 请重新输入数字"
fi
cat <<-EOF
你输入的用户名前缀是: $rep
你输入的统一密码是: $pass
你输入要创建的数量: $num
EOF
read -p "你确定要创建吗? [y|n]" aredy
case $aredy in
y|Y|yes|YES)
for i in $(seq $num)
do
username=$rep$i
id $usernme &>/dev/null
if [ $? -ne 1 ];then
useradd $username && \
echo "$pass"|passwd --stdin $username &>/dev/null
echo "$username Is OK!"
fi
done
;;
n|N|No|NO)
exit 1
;;
*)
read -p "你确定要创建吗? [y|n]" aredy
esac
5.for
循环通过文件批量创建用户
#!/usr/bin/bash
for i in $(cat user.tt)
do
id $i &>/dev/null
if [ $? -ne 0 ];then
useradd $i && \
echo "123" |passwd --stdin $i &>/dev/null
echo "$i Is OK"
else
echo "$i is Create Faile!!!"
fi
done
6.批量修改密码
#!/usr/bin/bash
for i in {160..162}
do
ip=192.168.70.$i
ping -c1 -W1 $ip &>/dev/null
if [ $? -eq 0 ];then
ssh $ip "echo 1|passwd --stdin root" &>/dev/null
echo "$ip: Is Passwod Successfuly"
fi
done
2.While循环语句
while
循环基础语法
//当条件测试成立(条件测试为真),执行循环体
while 条件测试
do
循环体
done
1.使用while
创建用户
#!/usr/bin/bash
while read user
do
id $user &>/dev/null
if [ $? -eq 0 ];then
echo "useradd $user is already exists"
else
useradd $user &>/dev/null
echo "useradd $user is Created."
fi
done<user.tt
#文件中存在用户和密码
#!/usr/bin/bash
while read user
do
u=$(echo $user|awk '{print $1}')
p=$(echo $user|awk '{print $2}')
id $u &>/dev/null
if [ $? -eq 0 ];then
echo "useradd $u is already exists"
else
useradd $u &&\
echo "$p"|passwd --stdin $u &>/dev/null
echo "useradd $u is Created Passwd Is Ok."
fi
done<user2.tt
3.Shell内置命令
exit 退出整个程序
break 结束当前循环,或跳出本层循环
continue 忽略本次循环剩余的代码,直接进行下一次循环
exit
示例
#!/usr/bin/bash
while true
do
echo "123"
exit
echo "456"
done
echo "Done....."
#执行后的结果
[root@Shell ~]# sh test.sh
123
break
示例
#!/usr/bin/bash
while true
do
echo "123"
break
echo "456"
done
echo "Done....."
#执行后的结果
[root@ansible-node30 ~]# sh test.sh
123
Done.....