在實際工作環境中,經常會遇到某項任務需要多次執行的情況,而每次執行時僅僅是處理的物件不一樣,其他命令完全相同。如:根據伺服器清單檢查各個主機的存活狀態;根據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...