我有一个脚本,我正在努力扫描我的局域网,如果有一个新的MAC地址没有出现在我的主列表中,则向我发送通知。我相信我的变量可能搞砸了。这就是我所拥有的:
#!/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:user@email.com' -s "WARNIG!! NEW DEVICE ON THE LAN" -i maclist.log user@email.com`
echo "emailing you"
fi
当我在maclist.log不存在时执行此操作时,我收到此回复:
diff: /root/maclist.log: No such file or directory
如果我使用maclist.log文件再次执行该文件,则该文件将从cp行重命名而不会出现任何问题。
答案 0 :(得分:1)
该行
FILEDIFF="$(diff $LIST $MASTERFILE)"
在运行时执行diff (而不是在以后使用$FILELIST
时)。那时尚未创建列表文件。
最简单的解决方法就是将diff命令放在当前使用$FILELIST
的位置。