一、編寫腳本for1.sh,使用for循環創建20賬戶,賬戶名前綴由用戶從鍵盤輸入,賬戶初始密碼由用戶輸入,例如:test1、test2、test3、......、test10
實現思路
- 通過
read
命令獲取用戶輸入的賬戶前綴和初始密碼; - 加入非空校驗:若前綴或密碼為空,退出腳本并提示;
- 使用
for循環
遍歷 1-20 的數字,拼接前綴生成賬戶名(如前綴+1
); - 用
id -u 賬戶名
判斷賬戶是否存在,不存在則創建并設置密碼。
代碼實現
[root@node1 ~]# vim for1.sh
#!/bin/bash# 功能:批量創建帶前綴的20個賬戶,支持密碼設置與重復校驗# 獲取用戶輸入:賬戶前綴和初始密碼
read -p "請輸入賬戶名前綴:" name
read -p "請輸入賬戶的密碼:" passwd# 非空校驗:若前綴或密碼為空,提示并退出
if [ -z $name ] || [ -z $passwd ]
thenecho "請輸入有效前綴名和密碼!"exit
else# for循環遍歷1-20,生成賬戶名并創建for ((i=1;i<=20;i++))douser=$name$i # 拼接賬戶名(如前綴為rch時,i=1則為rch1)# 判斷賬戶是否已存在(id -u 賬戶名 &> /dev/null 無輸出則存在)if id -u $user &> /dev/nullthenecho "賬戶已存在"continue # 跳過當前循環,進入下一次elseuseradd $user# 為新賬戶設置密碼(--stdin表示從標準輸入獲取密碼)echo "$passwd" | passwd --stdin root &> /dev/nullecho "$user創建成功"fidone
fi
測試驗證
# 測試1:輸入為空(前綴或密碼為空)
[root@node1 ~]# bash for1.sh
請輸入賬戶名前綴:
請輸入賬戶的密碼:
請輸入有效前綴名和密碼!
[root@node1 ~]# bash for1.sh
請輸入賬戶名前綴:rch
請輸入賬戶的密碼:
請輸入有效前綴名和密碼!
[root@node1 ~]# bash for1.sh
請輸入賬戶名前綴:
請輸入賬戶的密碼:123
請輸入有效前綴名和密碼!# 測試2:正常輸入前綴和密碼
[root@node1 ~]# bash for1.sh
請輸入賬戶名前綴:rch
請輸入賬戶的密碼:123
rch1創建成功
rch2創建成功
rch3創建成功
rch4創建成功
rch5創建成功
rch6創建成功
rch7創建成功
rch8創建成功
rch9創建成功
rch10創建成功
rch11創建成功
rch12創建成功
rch13創建成功
rch14創建成功
rch15創建成功
rch16創建成功
rch17創建成功
rch18創建成功
rch19創建成功
rch20創建成功
二、編寫腳本for2.sh,使用for循環,通過ping命令測試網段的主機連通性,IP前3段由用戶輸入,如:輸入192.168.48 ,則ping 192.168.48.125-192.168.48.135,將可以ping通的主機IP地址寫入到 /tmp/host_up.txt文件中,不能ping通的主機IP地址寫入到:/tmp/host_down.txt文件中
實現思路
- 通過
read
命令獲取 IP 前 3 段(如192.168.48
),加入非空校驗; - 使用
for循環
遍歷目標主機的最后一段 IP(如 120-130),拼接完整 IP; - 用
ping
命令檢測連通性(發 2 個包,超時 3 秒),根據結果寫入對應文件; - 為結果添加顏色標記(綠色表示通,紅色表示不通)
代碼實現
[root@node1 ~]# vim for2.sh
#!/bin/bash# 功能:批量檢測網段內主機連通性,區分保存通/不通的IP# 獲取IP前3段(如192.168.120)
read -p "請輸入網絡主機號:" ip# 非空校驗:若輸入為空,提示并退出
if [ -z $ip ]
thenecho "請輸入有效主機號"exit
else# for循環遍歷最后一段IP(120-130),可根據需求修改范圍for ((i=120;i<=130;i++))doIP=$ip.$i # 拼接完整IP(如192.168.120.120)# ping檢測:-c 2發2個包,-w 3超時3秒,結果重定向到/dev/nullif ping -c 2 -w 3 $IP &> /dev/nullthen# 連通:綠色標記并寫入host_up.txtecho -e "\e[32m $IP\e[0m" >> /tmp/host_up.txtelse# 不通:紅色標記并寫入host_down.txtecho -e "\e[1;31m $IP\e[0m" >> /tmp/host_down.txtfidone
fi
測試驗證
[root@node1 ~]# bash for2.sh
請輸入網絡主機號:
請輸入有效主機號
[root@node1 ~]# bash for2.sh
請輸入網絡主機號:192.168.120# 查看結果文件(另開終端)
[root@node1 ~]# tail -f /tmp/host_down.txt 192.168.120.120192.168.120.121192.168.120.122192.168.120.123192.168.120.124192.168.120.125192.168.120.126192.168.120.127192.168.120.129
[root@node1 ~]# tail -f /tmp/host_up.txt 192.168.120.128192.168.120.130
顏色提示如下:
三、使用for循環實現批量主機root密碼的修改
實現思路
- 準備 IP 列表文件(
ip.txt
),存放需修改密碼的主機 IP; - 通過
ssh-keygen
生成密鑰對,用ssh-copy-id
實現免密登錄(避免輸入密碼); - 用
for循環
讀取 IP 列表,通過ssh
遠程執行密碼修改命令。
前置準備(免密登錄配置)
# 1. 生成ssh密鑰對(一路回車默認配置)
[root@master ~]# ssh-keygen -t rsa# 2. 將公鑰復制到目標主機(實現免密登錄)
[root@master ~]# ssh-copy-id root@192.168.120.130 # 替換為目標IP
# 首次執行需輸入目標主機root密碼# 3. 驗證免密登錄(無需輸密碼即登錄成功)
[root@master ~]# ssh root@192.168.120.130
[root@node1 ~]# # 成功登錄# 4. 準備IP列表文件
[root@master ~]# vim ip.txt # 寫入需管理的主機IP
192.168.120.130
# 可添加多個IP,每行一個
代碼實現
[root@master ~]# vim for3.sh
#!/bin/bash# 功能:批量修改多臺主機的root密碼(需提前配置免密登錄)read -p "請輸入密碼:" passwd# for循環遍歷ip.txt中的所有主機IP
for i in $(cat ip.txt)
do# 通過ssh遠程登錄主機,執行密碼修改命令# echo $passwd | passwd --stdin root:將密碼通過標準輸入傳給passwdssh $i "echo $passwd | passwd --stdin root"
done
測試驗證
[root@master ~]# bash for3.sh
請輸入密碼:1234567890Authorized users only. All activities may be monitored and reported.
更改用戶 root 的密碼 。
passwd:所有的身份驗證令牌已經成功更新。# 驗證:登錄目標主機,用新密碼成功登錄
[root@master ~]# ssh root@192.168.120.130
root@192.168.120.130's password: # 輸入新密碼1234567890
[root@node1 ~]# # 登錄成功,密碼修改生效
總結
批量創建賬戶腳本(for1.sh)通過讀取用戶輸入的前綴和密碼,結合循環遍歷與賬戶存在性檢測,快速生成規范命名的賬戶,非空校驗確保了輸入的有效性,避免了因參數缺失導致的創建失敗。
網段連通性檢測腳本(for2.sh)則利用 ping 命令的特性,對用戶指定網段內的連續 IP 進行批量檢測,將結果按連通狀態分類保存并添加顏色標記,讓網絡狀態一目了然,簡化了網段排查工作。
多主機密碼修改腳本(for3.sh)的關鍵在于前置的免密登錄配置,通過 ssh 密鑰對實現無交互登錄后,循環遍歷 IP 列表執行密碼修改命令,輕松解決了多臺服務器密碼統一管理的難題。