4

ファイルに IP アドレスのリストがあり、telnet を使用してログインし、いくつかのコマンドを実行する必要があります (コマンドはすべてのマシンで一意ではないため、完全に自動化することはできません)。

以下は、タスクを部分的に自動化するスクリプトです (つまり、IP アドレスに telnet してログイン画面を表示します。その telnet セッションを終了すると、スクリプトはファイルに存在する次の IP アドレスに対して telnet する必要があります。

上記のタスクを達成するために、 forループを使用するスクリプトとwhileループを使用するスクリプトの 2 つ (どちらも同じ仕事をします) を作成しました。forループを使用するスクリプトは正常に動作しますが、 whileループを使用するスクリプトは最初の IP にログインした後に終了します。

for ループを使用するスクリプト:-

for i in `cat host_ip.txt`;
do 
    telnet $i;
done

失敗する while ループを使用するスクリプト:-

while read line;
do
   telnet $line ;
done < host_ip.txt

上記の失敗したループ スクリプトの出力は次のとおりです。

10.102.10.0
Trying 10.102.10.0...
telnet: connect to address 10.102.10.0: Network is unreachable
10.102.10.1
Trying 10.102.10.1...
Connected to 10.102.10.1.
Escape character is '^]'.
Connection closed by foreign host.

while ループを使用するスクリプトの何が問題になっていますか?

4

1 に答える 1

4

while ループでは、標準入力がファイルからリダイレクトされており、telnet も標準入力を介してそのファイルから読み取っていると思われます。次のことを試してください。

while read -u 3 line; do
    telnet $line
done 3< host_ip.txt

これは、0 (標準入力) 以外のファイル記述子を使用してファイルから読み取り、telnet コマンドの標準入力を保持します。

于 2012-08-14T12:40:43.937 に答える