猛擊 | Txt 檔案 > tmp> 處理 tmp> 輸出

猛擊 | Txt 檔案 > tmp> 處理 tmp> 輸出

最近,我們讓 Jump Host 能夠與我們所有的裝置進行互動。 6.x 是紅色的,我們沒有 root 存取權限。我們只能在 Autoexpect 和 bash 上編寫腳本 - 不可能有模組。

來源:我有 5000 個設備(每行 1 個,每個參數 3 個 - 位置主機名稱 IP - 並且它們是製表符分隔的)。

任務:搜尋每個位置 (ARGV1) 的所有裝置(假設 5000、40 表示一個位置),將輸出重新導向至暫存檔案(無輸出,回顯關閉),並為暫存目錄中的每個裝置執行指令。輸出應該是 HostName ARGV2 而不是 IP。

說 ping tmp 中的每個設備並為每個主機返回成功,或登入每個設備,運行命令,輸出主機結果並移至 tmp 檔案中的下一個。

輸入檔案結構範例:

AA Torp1 1.1.1.1 
AA Torp2 2.2.2.2
BB Torp97 9.9.9.9

假設您想要從 AA 位置對每個裝置執行 ping 操作。如何編寫cat hosts.txt | grep AAtmp 腳本,然後 ping 每個 IP,例如1.1.1.12.2.2.2輸出為:

如果 ping 成功則 Torp1 OK 如果 ping 不成功則 Torp2 NOK

它的基本範例......或者說,對於每個基於位置、 ssh 進行 grep 的 IP,運行命令列印輸出,然後刪除 tmp 檔案。

答案1

執行此操作的簡單方法是使用while read循環。一般格式為:

while read var1 var2 ... varN; do something; done < inputFile

預設情況下,每個輸入行都按空格分割,因此這基本上已經是您所需要的:

while read location hostname ip; do
    printf "Ping of $hostname ($ip): "
    ping -c1 "$ip" &>/dev/null && echo "OK" || echo "FAILED"
done < ips.txt

或者,限製到特定位置:

grep location ips.txt | while read location hostname ip; do
    printf "Ping of $hostname ($ip): "
    ping -c1 "$ip" &>/dev/null && echo "OK" || echo "FAILED"
done

如果我們用這個文件測試一下:

location1 example.com 93.184.216.34
location2 google.com 8.8.8.8
location1 bad.com 123.456.7.8

我們得到:

$ grep -w "^$location" ips.txt | 
    while read location hostname ip; do     
        printf "Ping of $hostname ($ip): ";     
        ping -c1 "$ip" &>/dev/null && echo "OK" || echo "FAILED"; 
    done 
Ping of example.com (93.184.216.34): OK
Ping of bad.com (123.456.7.8): FAILED

相關內容