Linux while 迴圈中使用ssh問題
Linux while 迴圈中使用ssh問題
refer to: http://www.blogread.cn/it/article/7420
如果要使用ssh批次登入到其它系統上操作時,我們會採用迴圈的方式去處理,那麼這裡存在一個巨大坑,你必須要小心了。
場景還原:
我現在是想用一個指令碼獲取一定列表伺服器的執行時間,首先我建立一個名字為ip.txt的IP列表(一個IP一行),再建好金鑰實現不用密碼直接登入。然後寫指令碼如下:
#!/bin/bashwhile read ips;do echo $ips;done
指令碼實現了逐行讀取列表中的IP,但是:
#!/bin/bashwhile read ips;do echo $ips; upt=`ssh root@$ips "uptime"`; echo $upt;done
指令碼只對第一個IP做了檢測,就直接跳出來了。
問題分析:
while使用重定向機制,ip.txt檔案中的資訊都已經讀入並重定向給了整個while語句,所以當我們在while迴圈中再一次呼叫read語句,就會讀取到下一條記錄。問題就出在這裡,ssh語句正好回讀取輸入中的所有東西。為了禁止ssh讀所有東西增加一個解決策略:
使用for迴圈代表while,因為for沒有一次把檔案內容快取獲取過來,程式碼段修改如下:
for ips in `cat ip.txt`; do echo ${ips}; upt=`ssh root@${ips} uptime`; echo $upt;done
若堅持使用while迴圈,那麼需要對ssh增加-n引數,為什麼增加了-n引數也可以解決問題呢?透過man ssh檢視-n引數的說明
Redirects stdin from /dev/null (actually, prevents reading from stdin)
修改後的程式碼如下:
#!/bin/bash while read ips; do echo $ips; upt=`ssh -n root@$ips "uptime"`; echo $upt; done
作者:全棧運維
連結:
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/2768/viewspace-2805778/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- while迴圈以及do while迴圈While
- for 迴圈與 while 迴圈While
- while迴圈 case迴圈While
- JavaScript中的while迴圈JavaScriptWhile
- C語言——迴圈結構(for迴圈,while迴圈,do-while迴圈)C語言While
- while迴圈While
- C#程式設計基礎第七課:C#中的基本迴圈語句:while迴圈、do-while迴圈、for迴圈、foreach迴圈的使用C#程式設計While
- C語言程式設計學習中while迴圈和do……while迴圈C語言程式設計While
- python 基礎習題6--for迴圈和while迴圈PythonWhile
- PHP For & While 迴圈PHPWhile
- python while迴圈PythonWhile
- Java 迴圈 - for, while 及 do…whileJavaWhile
- 分別使用while迴圈、do…while迴圈和for迴圈輸出1~100之間的所有偶數While
- 04流程控制 for迴圈,while迴圈While
- while迴圈補充While
- python-while迴圈PythonWhile
- Java迴圈結構-for,while及do…whileJavaWhile
- Java while和do while迴圈詳解JavaWhile
- while + else 使用,while死迴圈與while的巢狀,for迴圈基本使用,range關鍵字,for的迴圈補充(break、continue、else) ,for迴圈的巢狀,基本資料型別及內建方法While巢狀資料型別
- 七 while迴圈語句While
- sass的迴圈for,while,eachWhile
- 五、使用者輸入和while迴圈While
- FastJson中迴圈引用的問題ASTJSON
- Java 迴圈結構 - for, while 及 do...whileJavaWhile
- python04: while迴圈語句 break continue for in 迴圈PythonWhile
- Python中for迴圈和while迴圈有什麼區別?Python入門教程PythonWhile
- 15-python之while迴圈PythonWhile
- c#入門-while迴圈C#While
- C#練習,應用for,while,do-while迴圈C#While
- require()迴圈引用問題UI
- while迴圈和do迴圈、緩衝區、一維陣列While陣列
- Python學習-while迴圈練習PythonWhile
- Python基礎-While迴圈語句PythonWhile
- web前端開發教程-while迴圈Web前端While
- python基礎 while迴圈練習PythonWhile
- Java基礎 迴圈語句 for while do.....while語句JavaWhile
- while read line 與for迴圈的區別While
- 資料型別——集合與while迴圈資料型別While