【背景】
工作過程中遇到要從一個ip清單中擷取ip port,然後ssh ip 到目标機器進行特定的操作,但是編寫腳本的過程 使用while read line 讀取ip清單,在while循環中隻讀取第一個ip 後就退出腳本的情況。
【介紹】
解釋上面遇到的問題之前,先看到for 與while的測試對比,文中ip經過修改。
輸出結果如下:
由例子可見 while read line 是一次性将資訊讀入并指派給line ,而for是每次讀取一個以空格為分割符的字元串。
【原因】
while中使用重定向機制,IPS中的所有資訊都被讀入并重定向給了整個while 語句中的line 變量。是以當我們在while循環中再一次調用read語句,就會讀取到下一條記錄。問題就出在這裡,$line中的最後一行已經讀完,無法擷取下一行記錄,進而退出 while循環。
【解決方法】
1 使用ssh -n "command"
2 ssh "cmd" < /dev/null 将ssh 的輸入重定向輸入。