2016-09-23 9 views
0

스크립트가 있습니다. LAN을 스캔하고 마스터 목록에 나타나지 않는 새 MAC 주소가 있으면 알림을 보내려고합니다. 내 변수가 엉망이 될 수 있다고 생각합니다. 이것은 내가 무엇을 가지고 :Bash 쉘 스크립트가 작동하지 않습니다.

#!/bin/bash 

LIST=$HOME/maclist.log 
MASTERFILE=$HOME/master 
FILEDIFF="$(diff $LIST $MASTERFILE)" 

# backup the maclist first 
if [ -f $LIST ]; then 
     cp $LIST maclist_`date +%Y%m%H%M`.log.bk 
else 
     touch $LIST 
fi 

# this will scan the network and extract the IP and MAC address 
nmap -n -sP 192.168.122.0/24 | awk '/^Nmap scan/{IP=$5};/^MAC/{print IP,$3};{next}' > $LIST 

# this will use a diff command to compare the maclist created above and master list of known good devices on the LAN 
if [ $FILEDIFF ] 2> /dev/null; then 
     echo 
     echo "---- All is well on `date` ----" >> macscan.log 
     echo 
else 
     # echo -e "\nWARNING!!" | `mutt -e 'my_hdr From:[email protected]' -s "WARNIG!! NEW DEVICE ON THE LAN" -i maclist.log [email protected]` 
     echo "emailing you" 
fi 

maclist.log 내가이 응답을 얻을 존재하지 않을 때이 실행 : 나는 maclist.log 파일이 기존에 다시 실행하면

diff: /root/maclist.log: No such file or directory 

을 파일은 문제없이 cp 줄에서 이름이 변경됩니다.

+0

무엇이 당신의 질문입니까? –

+1

첫 번째 조건 블록 ('if [-f $ LIST] ...') 다음에'FILEDIFF = "$ (diff $ LIST $ MASTERFILE)"'을 실행하면 어떨까요? –

+0

@ThomasWilmotte 그래서 나는 그것을 시도했지만 아무런 오류가 없지만 FILEDIFF 변수는 그 이메일을 받기 때문에 여전히 작동하지 않는다. 또는 if [$ FILEDIFF] 문에 문제가있을 수 있습니다. – t3kg33k

답변

1

라인

FILEDIFF="$(diff $LIST $MASTERFILE)" 

그것이를 실행은 diff 을 실행 (안 나중에 $FILELIST를 사용하는 경우). 이 때 목록 파일이 작성되지 않았습니다.

가장 쉬운 수정은 diff 명령을 현재 $FILELIST이 현재 사용되는 전체 위치에 두는 것입니다.

관련 문제