我有一个问题,我想运行一个脚本来扫描我的网络,这样我就能查看网络中的设备。我还想在脚本中粘贴一些参数
当我运行脚本时:
./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 地址**
有人能帮我解决这两个论点吗?
这是我的脚本。
#!/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
是合适的。
风格问题:即使没有严格的规定,-
如果以下选项仅由一个字母组成,则 通常使用单数--
,如果由多个字母组成,则使用双数。例如,在您的同一个例子中,您有-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 地址的参考