for 迴圈語句的使用

2021-10-06 13:42:59 字數 2124 閱讀 8517

在實際工作環境中,經常會遇到某項任務需要多次執行的情況,而每次執行時僅僅是處理的物件不一樣,其他命令完全相同。如:根據伺服器清單檢查各個主機的存活狀態;根據ip位址黑名單設定拒絕訪問的防火牆策略等。

這樣繁瑣的重複任務時,if語句已經不能滿足需求。則我們需要for迴圈語句。

for語句的結構

使用for迴圈時,需要指定乙個變數及可能的取值列表,針對每乙個不同的取值重複執行相同的命令序列,直到變數值用完退出迴圈。在這裡,「取值列表」稱為for語句的執行條件,其中包括多個屬性相同的物件,需要預先指定(如上面提到的ip黑名單)。

for 

變數名  in  取值列表 do

命令序列

done

for語句的操作物件為使用者指定的變數,並通過in關鍵字為該變數預先設定了乙個取值列表,多個取值之間以空格進行分隔。位於do。。。。。done之間的命令序列稱為「迴圈體」,其中的執行語句需要引用變數以完成相對的任務。

for語句的執行流程:首先將列表中的第乙個取值賦予給變數,並執行do。。。。done迴圈體中的命令序列。然後將列表中的第二個取值賦值給變數,並執行迴圈體中的命令序列。。。。。。依次類推,直到列表中的所有取值用完,然後將跳至done語句,表示迴圈結束。

事例1:

根據姓名列表批量新增使用者:根據員工列表,在linux伺服器中新增相應的使用者賬號。初始密碼為123456.

# vi adduser.sh

#!/bin/bash

ulist=$(cat /root/users.txt)

for uname in $ulist do

useradd $uname

echo "123456" | passwd --stdin $uname &>/dev/null

done

指令碼中的users.txt為員工姓名列表。(自定義,隨便寫一些使用者名稱即可)

執行之後驗證一下:

# chmod +x adduser.sh

# ./adduser.sh

# tail -10 /etc/passwd

練習:請將上文指令碼新建的使用者刪除掉。使用for迴圈。

事例2:

根據ip位址列表監測主機狀態:根據公司伺服器ip位址列表檔案,監測各個主機ping的聯通性,輸出各個主機是否啟動、關閉。這其中伺服器數量並不固定,ip位址之間也無特殊規律。

# vi ipfor.sh

#!/bin/bash

hlist=$(cat /root/iplist.txt)

for ip in $hlist do

ping -c 3 $ip &> /dev/null

if [ $? -eq 0 ]

then

echo "host $ip is up"

else   

echo "host $ip is down" fi

done

指令碼中的iplist是ip位址檔案。

事例3:批量新增使用者

#!/bin/bash #

本指令碼用來批量建立系統使用者

echo '

成功建立使用者:' > /root/user_name

read -ep '

請輸入要建立的使用者數量:' num

for i in `seq 1 $num` do

grep "user-$i" /etc/passwd > /dev/null 2>&1

if [ $? -ne 0 ]; then

useradd user-$i > /dev/null 2>&1

if [ $? -eq 0 ]; then

echo "user-$i" >> /root/user_name

echo "user-$i"| passwd user-$i --stdin > /dev/null 2>&1

echo "user-$i

建立成功!" fi

else

echo "user-$i

使用者已存在,建立失敗!"

fi done

cat /root/user_name

Python 迴圈語句 while語句的使用

python 中的迴圈語句有 for 和 while。python 迴圈語句的控制結構圖如下所示 while 迴圈 python 中 while 語句的一般形式 while 判斷條件 condition 執行語句 statements 另外,在 python 中沒有 do while 迴圈。例如下面...

for語句巢狀迴圈使用

案例 要求 輸出 組成的幾行幾列拼成的長方形和三角形 分析 輸出的應該是單個 組成的圖形,所以要考慮到每行每列的 個數 1.要想組成三行四列的長方形圖形 則需要每行先排好四個 再連續執行下面的程式,輸出三行同樣的 for int i 0 i 4 i 2.優化 巢狀迴圈 for int i 0 i 3...

scss 條件語句 迴圈語句使用

type monster p else if type matador else if type monster else 編譯為 p兩種格式 for var from through包含 與 的值 for var from to只包含 var 可以是任何變數,比如 i 和 必須是整數值 for i...