
我有一個問題,我想運行一個腳本來掃描我的網絡,我可以看到網路中的設備已啟動。我想在腳本中貼上一些參數
當我運行腳本時:
./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 位址和de mac 位址
有人能幫我解決這兩個論點嗎?
這是我的劇本。
#!/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 的「案例陳述」行沒有問題。
儘管如此,我強烈建議您將選項名稱更改為-mac
到--ip
。 Mac 位址和 Ip 位址是不同的概念,在這種情況下我認為ip
是合適的概念。
風格問題:即使這不是嚴格的規則,如果以下選項僅由一個字母組成,則通常使用 single,如果由多個字母組成,則通常-
使用 double 。--
例如,在您的同一個範例中,您有-h
和--help
。 (甚至更正--xx-YY
)。腳本往往會隨著時間的推移而持續,並且只用一個腳本來查看它會很奇怪-
。
回到 #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
**
如果我正確理解你的意思,你想以某種方式顯示所有的列表向上該子網路中的主機。所以你不需要指定結尾變數為智慧財產,但您應該掃描所有子網路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 位址的參考