2013-03-13 4 views
1

스크립트의 기존 변수를 대체 할 선택적 인수를 bash 스크립트에 전달할 수 있습니까? 예를 들어 : 이것은 현재 호스트의 IP를 사로 잡고bash 스크립트의 변수를 대체하는 선택적 인수

#!/bin/bash 
#hostfinder.sh 
#Find hosts in current /24 network 

subnet=$(hostname -i | cut -d. -f1,2,3) 

for j in \ 
    $(for i in $subnet.{1..255}; do host $i; done | grep -v not | cut -d" " -f5) 
do ping -c1 -w 1 $j; done | grep -i from | cut -d" " -f3,4,5 | tr ':' ' ' | \ 
sed -e 's/from/Alive:/' 

, 가능한 이웃, ping 테스트가 찾은 호스트 이름에 대한 역방향 조회를 실행하고 다음과 유사한 출력 표시 :

Alive: host1.domain (10.64.17.23) 
Alive: host2.domain (10.64.17.24) 
... 

을 나를 미치게 만들지 만, 그것은 nmap보다 훨씬 빠르며 좋은 목록을 뱉어 낸다.

어쨌든 스크립트를 실행할 때 클래스 C 네트워크 주소의 처음 3 옥텟을 $ subnet 변수에 $ 1 인수로 선택적으로 전달하고 싶습니다. 예를 들면 다음과 같습니다.

./hostfinder.sh 10.20.0 

첫 번째 생각은 $ subnet = $ 1과 (과) 같은 것을 시도한 것이지만 작동하지 않는다고 가정합니다. 나는 스크립트를 다시 작성하는 것에 관심이 없기 때문에 더 우아 해 지거나 무엇이든 할 수 있습니다. 나는 주로 제목에 무엇을 넣었는지 궁금합니다.

+0

의 nmap은 완전히 다른 일을하기위한 것입니다 :

당신은 getopt 여기 사용의 좋은 예를 찾을 수 있습니다. – LtWorf

+0

nmap은 많은 일을 할 수 있습니다. :) –

+0

또한 nmap을 사용하는 핑 스윕은 다음과 같이 진행됩니다 : nmap -sP 192.168.1.1-254 –

답변

1

:

subnet=$(hostname -i | cut -d. -f1,2,3) 

과 :

case $# in 
    0) subnet=$(hostname -i | cut -d. -f1,2,3);; 
    1) subnet="${1}";; 
    *) echo "To many arguments" >&2; exit 1;; 
esac 
  • $#이 덜 getopt 우아하지만 이해하고 확장하기 쉬운 명령 줄 인수
  • 의 수입니다.
+0

고맙습니다. 나는 이것으로 놀고 응답 할 것이다. –

+0

그것은 챔피언처럼 일했습니다. 고마워요! 이제 클래스 A 또는 B에 대한 옵션을 더 확장 할 수 있습니다. 이것은 nmap이 설치되지 않았거나 nmap -sP가 인벤토리에 필요한 호스트와 함께 특정 서브넷에서 작동하지 않는 멋진 휴대용 스위퍼로 바뀔 것입니다. –

0

getopt를 사용하여 명령 줄의 옵션에서 읽은 다음 변수를 설정하십시오. 에 대한 대체 방법

+0

제안 해 주셔서 감사합니다. 한 가지 예를 들려 주시겠습니까? –

-1

LtWorf가 제안한 것과 마찬가지로 getopt을 사용해보십시오. 명령 행에서 옵션과 인수를 읽습니다. getopt usage example