
내 네트워크를 검색하고 내 네트워크에 장치가 있는지 확인할 수 있는 스크립트를 실행하고 싶은 질문이 있습니다. 스크립트에도 몇 가지 인수를 붙여넣고 싶습니다.
스크립트를 실행할 때:
./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
하지만 내 문제는 --up en -mac 스크립트를 실행할 때 원하는 인수입니다. ./ping.sh --up , 거기에 있는 컴퓨터만 표시됩니다. 그리고 인수 - mac은 스크립트를 실행할 때도 문제가 됩니다. 컴퓨터가 핑을 한 후 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
**
내가 의미하는 바를 올바르게 이해했다면 모든 항목의 목록을 어떻게든 표시하고 싶을 것입니다.위로해당 서브넷의 호스트입니다. 따라서 다음을 지정할 필요가 없습니다.끝에 대한 변수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 주소에 대한 참조