変数の数を調べて、出力を生成するスクリプトを作成しようとしています。つまり、pingを使用し、ttyに基づいてLinuxまたはWindowsを実行していることを確認します。仕事は複雑すぎるかもしれませんが、これは私が得たものです。
#!/bin/bash
var1=$(ping $1 -c 1) | awk '{if("$var1"=="128") print "Host is LIVE Running: Windows OS"}'
出力を生成しません。 awkを使わずにIF文を使ってみましたが、接続できないとわかっているIPを入力すると出力は生成されません。
#!/bin/bash
var1=$(ping $1 -c 1)
if [[ "$var1" == *"128"* ]]; then
echo "Host is LIVE Running: Windows OS"
elif [[ "$var1" == *"64"* ]]; then
echo "Host is LIVE Running: Linux OS"
elif [[ "$var1" == *"Unreachable"* ]]; then
echo "Host appears DOWN!"
fi
建設的な批判を歓迎します!ありがとうございます。
答え1
awk
環境で変数を使用するには、変数を設定する必要があります。このように:
var1=$(ping $1 -c 1) ; awk -v var2=$var1 '{if(var2 == 128)....
数値を比較するときは、bash
次のものを使用する必要があります。
if [[ "$var1" -eq *"128"* ]]; then...
=
文字列の場合とAFAIKのbash
両方を使用できます。これは同じ意味です(から)。=
==
if
答え2
スクリプトが機能しないいくつかの理由は次のとおりです。
$var1
awk内にシェル変数はありません。- それでも、
"$var1"
awkではあなたが思うことを意味しません。リテラルテキストなので、$var1
引用符がない場合は、変数の値としてフィールド番号を間接的に指定しますvar1
(例:var1が2に等しい場合は、field2に$ 2が入力されます)。 awkで初期化されていない変数の値は0なので、$ 0またはフル入力行になります。 $var1
ping
Bashにはttl値だけでなく、コマンドの完全な出力も含まれます。- ICMPエコー応答パケットのTTL値を使用してリモートホストのオペレーティングシステムを確認することは信頼できない方法です。 WindowsはTTL 128を使用する唯一のオペレーティングシステムではありません(すべてのWindowsバージョンが128を使用しているわけではありません)。
答え3
完了しました。応援していただきありがとうございます。このコードは、一見するとどのオペレーティングシステムであるかをよりよく理解するのに役立ちます。
#!/bin/bash
var1=$(ping $1 -c 1 -W 3 | grep "64 bytes" | cut -d " " -f 6)
if [[ "$var1" -eq "ttl=63" ]]; then
echo "Host is LIVE! Most likely running: Linux OS"
elif [[ "$var1" -eq "ttl=64" ]]; then
echo "Host is LIVE! Most likely running: Linux OS"
elif [[ "$var1" -eq "ttl=127" ]]; then
echo "Host is LIVE! Most likely running: Windows OS"
elif [[ "$var1" -eq "ttl=128" ]]; then
echo "Host is LIVE! Most likely running: Windows OS"
elif [[ "$var1" -eq "ttl=31" ]]; then
echo "Host is LIVE! Most likely running: Windows 95 OS"
elif [[ "$var1" -eq "ttl=32" ]]; then
echo "Host is LIVE! Most likely running: Windows 95 OS"
elif [[ "$var1" -eq "ttl=255" ]]; then
echo "Host is LIVE! Most likely running: MAC / OPENBSD / CISCO / SOLARIS OS"
elif [[ "$var1" -eq "ttl=254" ]]; then
echo "Host is LIVE! Most likely running: MAC / OPENBSD / CISCO / SOLARIS OS"
elif [[ "$var1" == "" ]]; then
echo "Host appears to be DOWN!"
fi