
質問があります。ネットワークをスキャンして、ネットワーク上のデバイスが起動しているかどうかを確認するスクリプトを実行したいのですが。スクリプトにいくつかの引数も貼り付けたいです。
スクリプトを実行すると:
./ping.sh --xx-YY 20 50
出力:
192.168.0.20 is down
192.168.0.21 is up
..................................
192.168.0.50 is up
the argument -t , counts 200 by the last digit for ex. ./ping.sh -t 20 output: 192.168.0.220 is up
しかし、私の問題は、スクリプト ./ping.sh --up を実行するときに必要な引数 --up en -mac です。起動しているコンピューターのみが表示されます。また、引数 - mac も、スクリプトを実行するときに問題になります。コンピューターが ping された後に IP アドレスと MAC アドレスを表示したいのです**
この 2 つの議論について誰か助けてくれませんか?
これは私の脚本です。
#!/bin/bash
while [[ -n "$@" ]]
do
case "$1" in
-h|--help)
Extension=1
shift
;;
-XX-YY)
Extension=2
shift
min=$1
shift
max=$1
shift
;;
--up)
Extension=3
shift
end=$1
shift
;;
-t)
Extension=4
shift
count=$(($1+200))
shift
;;
esac
done
if [ "$Extension" -eq 1 ] ; then
echo "dit is de help"
fi
if [ "$Extension" -eq 2 ] ; then
for ((n=$min ; n<=$max ; n+=1))
do
ip=192.168.0.$n
if ping -c 1 -w 1 ${ip} > /dev/null 2> /dev/null >> logping.txt; then
echo "${ip} is up"
else
echo "${ip} is down"
fi
done
fi
if [ "$Extension" -eq 3 ] ; then
ip=192.168.0.$end
if ping -c 1 -w 1 ${ip} > /dev/null 2> /dev/null >> /logping.txt; then
echo "${ip} is up"
fi
fi
if [ "$Extension" -eq 4 ] ; then
ip=192.168.0.$count
if ping -c 1 -t 1 ${ip} > /dev/null 2> /dev/null >> logping.txt; then
echo "${ip} is up"
else
echo "${ip} is down"
fi
fi
答え1
注文してみましょう。
ケース5:-mac
あるいは、もっと良いのは、--ip
ケース#5の「caseステートメント」の行には問題はありません。
それでも、オプションの名前を次のように変更することを強くお勧めします。-mac
に--ip
. Mac アドレスと IP アドレスは異なる概念であり、この場合はip
適切であると思います。
スタイルの問題: 厳密なルールではありませんが、-
後続のオプションが 1 文字のみで構成されている場合は 1 文字を使用し、 --
複数の文字で構成されている場合は 2 文字を使用するのが一般的です。たとえば、同じ例では-h
と があります--help
( も修正してください--xx-YY
)。スクリプトは時間の経過とともに持続する傾向があり、 が 1 つしかないと後で見たときに奇妙になります-
。
#5 のコードに戻ると、次のようなものを使用できます。
if [ "$Extension" -eq 5 ] ; then
ip=192.168.1.$mac
if nmap -sP -n -r $ip | grep "is up" >/dev/null ; then
echo "${ip} is up"
fi
fi
その試みにおけるエラー:
ip=192.168.0.$mac
は定義されています192.168.
0
.xxx
次の行では変数は使用されず$ip
、代わりにサブネットが使用されています192.168.
1
.0/24
ネストされたif... then fi
ブロックは によって閉じられていませんfi
。
**ケース3: --up
**
私があなたの言いたいことを正しく理解しているなら、何らかの方法ですべてのリストを表示したいということですね。上サブネット内のホストを指定する必要はありません。終わり変数のIPただし、すべてのサブネットをスキャンする必要があります192.168.1.xxx
。
次のようなコマンドを使うことができます
if [ "$Extension" -eq 3 ] ; then
sudo nmap -sP -n -r 192.168.1.0/24 | grep -E "Nmap scan|MAC Address:"
fi
更新: MAC アドレスに関する参考資料