W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
for循環(huán)語句允許腳本一次性讀取多個(gè)信息,然后逐一對(duì)信息進(jìn)行操作處理,當(dāng)要處理的數(shù)據(jù)有范圍時(shí),使用for循環(huán)語句再適合不過了。for循環(huán)語句的語法格式如圖4-20所示。
圖4-20 for循環(huán)語句的語法格式
下面使用for循環(huán)語句從列表文件中讀取多個(gè)用戶名,然后為其逐一創(chuàng)建用戶賬戶并設(shè)置密碼。首先創(chuàng)建用戶名稱的列表文件users.txt,每個(gè)用戶名稱單獨(dú)一行。讀者可以自行決定具體的用戶名稱和個(gè)數(shù):
[root@linuxprobe ~]# vim users.txt
andy
barry
carl
duke
eric
george
接下來編寫Shell腳本Example.sh。在腳本中使用read命令讀取用戶輸入的密碼值,然后賦值給PASSWD變量,并通過-p參數(shù)向用戶顯示一段提示信息,告訴用戶正在輸入的內(nèi)容即將作為賬戶密碼。在執(zhí)行該腳本后,會(huì)自動(dòng)使用從列表文件users.txt中獲取到所有的用戶名稱,然后逐一使用“id 用戶名”命令查看用戶的信息,并使用$?判斷這條命令是否執(zhí)行成功,也就是判斷該用戶是否已經(jīng)存在。
需要多說一句,/dev/null是一個(gè)被稱作Linux黑洞的文件,把輸出信息重定向到這個(gè)文件等同于刪除數(shù)據(jù)(類似于沒有回收功能的垃圾箱),可以讓用戶的屏幕窗口保持簡(jiǎn)潔。
[root@linuxprobe ~]# vim Example.sh
#!/bin/bash
read -p "Enter The Users Password : " PASSWD
for UNAME in `cat users.txt`
do
id $UNAME &> /dev/null
if [ $? -eq 0 ]
then
echo "Already exists"
else
useradd $UNAME &> /dev/null
echo "$PASSWD" | passwd --stdin $UNAME &> /dev/null
if [ $? -eq 0 ]
then
echo "$UNAME , Create success"
else
echo "$UNAME , Create failure"
fi
fi
done
執(zhí)行批量創(chuàng)建用戶的Shell腳本Example.sh,在輸入為賬戶設(shè)定的密碼后將由腳本自動(dòng)檢查并創(chuàng)建這些賬戶。由于已經(jīng)將多余的信息通過輸出重定向符轉(zhuǎn)移到了/dev/null黑洞文件中,因此在正常情況下屏幕窗口除了“用戶賬戶創(chuàng)建成功”(Create success)的提示后不會(huì)有其他內(nèi)容。
在Linux系統(tǒng)中,/etc/passwd是用來保存用戶賬戶信息的文件。如果想確認(rèn)這個(gè)腳本是否成功創(chuàng)建了用戶賬戶,可以打開這個(gè)文件,看其中是否有這些新創(chuàng)建的用戶信息。
[root@linuxprobe ~]# bash Example.sh
Enter The Users Password : linuxprobe
andy , Create success
barry , Create success
carl , Create success
duke , Create success
eric , Create success
george , Create success
[root@linuxprobe ~]# tail -6 /etc/passwd
andy:x:1001:1001::/home/andy:/bin/bash
barry:x:1002:1002::/home/barry:/bin/bash
carl:x:1003:1003::/home/carl:/bin/bash
duke:x:1004:1004::/home/duke:/bin/bash
eric:x:1005:1005::/home/eric:/bin/bash
george:x:1006:1006::/home/george:/bin/bash
您還記得在學(xué)習(xí)雙分支if條件語句時(shí),用到的那個(gè)測(cè)試主機(jī)是否在線的腳本么?既然我們現(xiàn)在已經(jīng)掌握了for循環(huán)語句,不妨做些更酷的事情,比如嘗試讓腳本從文本中自動(dòng)讀取主機(jī)列表,然后自動(dòng)逐個(gè)測(cè)試這些主機(jī)是否在線。
首先創(chuàng)建一個(gè)主機(jī)列表文件ipadds.txt:
[root@linuxprobe ~]# vim ipadds.txt
192.168.10.10
192.168.10.11
192.168.10.12
然后前面的雙分支if條件語句與for循環(huán)語句相結(jié)合,讓腳本從主機(jī)列表文件ipadds.txt中自動(dòng)讀取IP地址(用來表示主機(jī))并將其賦值給HLIST變量,從而通過判斷ping命令執(zhí)行后的返回值來逐個(gè)測(cè)試主機(jī)是否在線。腳本中出現(xiàn)的$(命令)是一種完全類似于第3章的轉(zhuǎn)義字符中反引號(hào)命令
的Shell操作符,效果同樣是執(zhí)行括號(hào)或雙引號(hào)括起來的字符串中的命令。大家在編寫腳本時(shí),多學(xué)習(xí)幾種類似的新方法,可在工作中大顯身手:
[root@linuxprobe ~]# vim CheckHosts.sh
#!/bin/bash
HLIST=$(cat ~/ipadds.txt)
for IP in $HLIST
do
ping -c 3 -i 0.2 -W 3 $IP &> /dev/null
if [ $? -eq 0 ] ; then
echo "Host $IP is On-line."
else
echo "Host $IP is Off-line."
fi
done
[root@linuxprobe ~]# ./CheckHosts.sh
Host 192.168.10.10 is On-line.
Host 192.168.10.11 is Off-line.
Host 192.168.10.12 is Off-line.
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: