Cat-God-007

导航

Shell脚本编程学习笔记(五)---- 循环语句

本文已参与[新人创作礼]活动,一起开启掘金创作之路。

循环语句

循环在每种编程语言中,都有提到且都有具体的应用;

循环的存在是为了简化代码量冗余的一种方式;

shell常用的就是for循环与while循环等。详细介绍如下:

for

for 变量名 in [ 取值列表 ]
do 
     循环体
done

例如 检查同网段中是否有其他主机

#!/usr/bin/bash
#获取本机能联通的其他主机对应的IP
>ip.txt   #清空此文件
for i in {1..254}
do
ip=192.168.200.$i
{
ping -c2 -W1 $ip &>/dev/null
if [ $? -eq 0 ];then
   echo "$ip" >> ip.txt
fi
}&       #放在子shell里,并配置高并发
done
   wait
   echo "Get Ip Is OK!"
#!/usr/bin/bash
#通过读文件的方式,for循环批量创建用户(要提前准备个装有用户名的文件user.txt)
for i in $(cat user.txt)
do 
         id $i &>/dev/null
         if [ $? -ne 0 ];then
                    useradd $i && \
                    echo "2020006473" |passwd --stdin $i &>/dev/null
                    echo "$i is OK!"
         else       
                    echo "$i is Create Faile!!!"
         fi
done

while

while 条件测试
do
   循环体
done

例如 while循环批量创建用户

#!/usr/bin/bash
#通过读文件的方式,while循环批量创建用户(要提前准备个装有用户名的文件user.txt)
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.txt
#!/usr/bin/bash
#通过读文件的方式,while循环批量创建用户(要提前准备个装有用户名,密码的文件user.txt)
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<user.txt
密钥分发
vi key.sh
#!/usr/bin/bash
#1.获取主机对应的IP
>ip.txt   #清空此文件
for i in {1..254}
do
        ip=192.168.200.$i
        {
        ping -c2 -W1 $ip &>/dev/null
        if [ $? -eq 0 ];then
              echo "$ip" >> ip.txt
        fi
        }&       #放在子shell里,并配置高并发
done
#2.生产对应密钥
        if [ ! -f ~/.ssh/id_rsa ];then
                ssh-keygen -P "" -f ~/.ssh/id_rsa  #生成密钥
        fi

#3.批量分发密钥
        yum -y reinstall expect
        while read line
        do
                        pass=2020006473
                        ./usr/bin/expect <<-EOF
                                spawn ssh-copy-id root$line
                                expect {
                                        "yes/no"{send"yes\r";exp_continue}
                                        "password:"{send"$pass\r"}
                                }
                                expect eof
                        EOF
        done<ip.txt

此案例暂未完全成功,但其中精华值得观看。

R-C(17).jpg 感谢大家,点赞,收藏,关注,评论!

posted on 2022-06-02 08:42  CatGod007  阅读(0)  评论(0)    收藏  举报  来源