Bash shell脚本无效

时间:2016-09-23 17:40:15

标签: bash shell

我有一个脚本,我正在努力扫描我的局域网,如果有一个新的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行重命名而不会出现任何问题。

1 个答案:

答案 0 :(得分:1)

该行

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

在运行时执行diff (而不是在以后使用$FILELIST时)。那时尚未创建列表文件。

最简单的解决方法就是将diff命令放在当前使用$FILELIST的位置。