問題:
我現在是想用一個腳本獲取一定列表服務器的運行時間。首先我建立一個名字為ip.txt的IP列表(一個IP一行),再建好密鑰實現不用密碼直接登錄。然后寫腳本如下:#!/bin/bashwhile read ips;doecho $ips;done < ip.txt腳本實現了逐行讀取列表中的IP,但是:#!/bin/bashwhile read ips;doecho $ips;upt=`ssh root@$ips "uptime"`;echo $upt;done < ip.txt腳本實現了一個IP的檢測,就直接跳出來了。大神,求救!!!
大神解答:
1、while使用機制,ip.txt文件中的信息都已經讀入并給了整個while語句。所以當我們在while循環中再一次調用read語句,就會讀取到下一條記錄。問題就出在這里,ssh語句正好回讀取輸入中的所有東西。為了禁止ssh讀所有東西增加一個
while?read?ips;
do
echo?$ips;
upt=`ssh?root@${ip1}?uptime?
echo?$upt;
done?
2、用for
for?ips?in?`cat?ip.txt`;?do
echo?${ips};
upt=`ssh?root@${ips}?uptime`;
echo?$upt;
done
高手啊,講解得非常透徹非常專業。我還想問你個問題:
1、為什么用
2、兄弟提到for語句,也寫得很精辟。for語句怎么不存在while語句剛才的那個問題?
3、剛才樓上有個兄弟提到用-n參數,我試過也是可以的,你可以幫他回答一下為什么這個-n也可以的嗎?
追答1、
2、for沒有一次把文件內容緩存獲取過來
3、看一下man?ssh?-n參數??????Redirects?stdin?from?/dev/null?(actually,?prevents?reading?from?stdin).和