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.....