shell之循環語句

一、 shell中的循環語句

循環語句,主要是爲了簡化重複動做代碼,在運維方面主要用於重複某項動做,例如批量建立用戶,在shell中主要有兩種 while循環 與 for 循環。shell

一、while循環

while 循環主要用於無限次的循環狀況,例如登陸認證,你不知道多少次能夠登陸成功,固然能夠認爲限制登陸次數。bash

1.一、while循環 的結構
#!/bin/bash
while true
do
    echo "哈哈哈哈哈哈哈哈哈"  #循環體
done
1.二、 while循環腳本示例

1)、while循環從文件讀取用戶,增長用戶,而且設置密碼。運維

一、建立用戶文件
[root@localhost ~]# cat >123.txt<<-EOF
love1
love2
love3
love4
love5
EOF

二、while 腳本
#!/bin/bash
rm -rf info.txt &>/dev/null
while read user
do
    id $user &>/dev/null
    if [ $? -ne 0 ];then
        useradd $user &>/dev/null
        pwd=`mkpasswd -l 10`
        echo $pwd | passwd --stdin $user &>/dev/null
        echo "$user:$pwd"|tee -a info.txt
        echo " 用戶 $user 添加成功..."
    else
    echo "$user 已經存在..."
    fi
done<123.txt

2)批量添加指定前綴,數量的用戶ssh

#!/bin/bash
read -p "請輸入用戶前綴,密碼,數量:" pre pass num
if [[ ! $num =~ ^[0-9]+ ]];then
    ehco "請輸入數字"
fi
cat <<EOF
    你輸入的用戶名前綴爲:$pre
    你設立的密碼爲:$pass
    你設定用戶個數爲:$num
EOF
while true
do
read -p "你肯定要建立?" ch
case $ch in
    y|yes)
        for i in `seq $num`;do
            id $pre$i &>/dev/null
            if [  $? -ne 0 ];then
                useradd $pre$i
                echo "用戶 $pre$i 建立成功..."
                echo $pass|passwd --stdin $pre$i &>/dev/null
            else
                continue
                echo "用戶 $pre$i 已經存在..."
            fi
        done
        break
        ;;
    n|no)
        exit 1
        ;;
    *)
        echo "錯誤輸入,請從新輸入..."
esac
done

3)、批量刪除用戶測試

#!/bin/bash
read -p "請輸入用戶前綴,數量:" pre num
cat <<EOF
    你輸入的用戶名前綴爲:$pre
    你設定用戶個數爲:$num
EOF
while true
do
read -p "你肯定要刪除?" ch
case $ch in
    y|yes)
        for i in `seq $num`;do
            id $pre$i &>/dev/null
            if [  $? -eq 0 ];then
                userdel -r  $pre$i
                echo "用戶 $pre$i 刪除成功..."
            else
                continue
                echo "用戶 $pre$i 不存在..."
            fi
        done
        break
        ;;
    n|no)
        exit 1
        ;;
    *)
        echo "錯誤輸入,請從新輸入..."
esac
done
二、for 循環

for 循環主要用於有限次數循環,例如測試一個網段內地ip是否通達,又或者咱們要循環迭代一個文件的內容,咱們能夠for循環來完成工做code

2.1 for 循環結構
for i in `seq 5` #可循環迭代的對象,例如一個打開的文件,{1..100}等
    do
    echo "haha $i"  #循環體,for循環從中依次取值
    done
2.2 for循環腳本

1)檢測子網段內ip的通達性對象

#!/bin/bash
for i in {1..200}
do
    {
    ip=100.100.100.$i
    ping -c1 -w1 $ip
    if [ $? -eq 0 ];then
        echo "$ip"|tee -a ip.txt
   fi
}&
done
wait
cat ip.txt

2)批量修改子網段ssh登錄密碼ip

#!/bin/bash
for i in {10..200}
do
{
    ip=100.100.100.$i
    ping -c1 -w1 $ip &>/dev/null
    if [ $? -eq 0 ];then
        ssh $ip "echo 123456 |passwd --stdin root" &>/dev/null
        echo "$ip"|tee -a ch_ip.txt
    else
        echo "$ip"|tee -a er_ip.txt
    fi
}&
done

3)、批量添加用戶it

#!/bin/bash
read -p "請輸入用戶前綴,密碼,數量:" pre pass num
if [[ ! $num =~ ^[0-9]+ ]];then
    ehco "請輸入數字"
fi
cat <<EOF
    你輸入的用戶名前綴爲:$pre
    你設立的密碼爲:$pass
    你設定用戶個數爲:$num
EOF
while true
do
read -p "你肯定要建立?" ch
case $ch in
    y|yes)
        for i in `seq $num`;do
            id $pre$i &>/dev/null
            if [  $? -ne 0 ];then
                useradd $pre$i
                echo "用戶 $pre$i 建立成功..."
                echo $pass|passwd --stdin $pre$i &>/dev/null
            else
                continue
                echo "用戶 $pre$i 已經存在..."
            fi
        done
        break
        ;;
    n|no)
        exit 1
        ;;
    *)
        echo "錯誤輸入,請從新輸入..."
esac
done

二、循環中用到的一些其餘shell命令

一、break 結束循環
二、exit 退出整個腳本 
三、continue 忽略本次循環剩餘的代碼,直接進⾏下一次循環
相關文章
相關標籤/搜索