Bash | Txtファイル> tmp>プロセスtmp>出力

Bash | Txtファイル> tmp>プロセスtmp>出力

最近では、Jump Hostを有効にしてすべてのデバイスと対話できました。 6.x は赤で、root アクセス権がありません。 Autoexpectとbashでのみスクリプトを書くことができ、モジュールは不可能です。

ソース:5000個のデバイスがあります(1行あたり1つ、パラメータごとに3つ - 場所ホスト名IP -タブで区切られています)。

処置:各場所(ARGV1)からすべてのデバイスを検索し(5000と仮定し、40は場所を示します)、出力を一時ファイルにリダイレクトし(出力なし、エコーオフ)、一時ディレクトリ内の各デバイスに対してコマンドを実行します。出力はIPではなくHostName ARGV2でなければなりません。

tmpで各デバイスをpingし、各ホストに対して成功を返すか、各デバイスにログインし、コマンドを実行し、ホストの結果を印刷し、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 AAたとえば、tmpスクリプトを作成してから各IPをpingする方法の出力は次のとおりです1.1.1.12.2.2.2

pingが成功したらTorp1 OK pingが失敗するとTorp2 NOK

デフォルトの例...または位置ベースの各IPに対してssh grepコマンド出力を実行し、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

おすすめ記事