在bash脚本中将Mac地址保存在变量中并使用它来检查更改

时间:2017-04-11 17:16:43

标签: linux bash shell unix

我正在尝试创建一个bash脚本。

  1. 脚本要求用户输入IP地址
  2. 然后,脚本会使用arp -a命令查找IP地址所在的行。
  3. MAC地址保存为名为MAC的变量。
  4. 脚本检查MAC地址是否未更改。
  5. #!/bin/bash
    # Xdetect
    
    echo "Welcome to Xdetect"
    echo "Enter IP address of device to monitor (usually default gateway)"
    read IP  
    
    MAC=arp -a | grep $IP | awk {'print $4'}
    echo =$MAC
    while : 'arp -a | grep $IP | awk {'print $4'}' = $MAC
    
    do
    echo "Mac has not changed"
     sleep 2
    done
    

    脚本不起作用,即使mac地址发生变化,它也会循环并回显MAC has not changed

    在它循环之前,出现错误:Xdetect.sh 9: Xdetect.sh: -a: not found

    我该如何解决这个问题?

1 个答案:

答案 0 :(得分:2)

test声明中,您的意思是:而不是空命令while吗?像这样的东西,没有反模式grep | awk:

MAC=$(arp -a | awk -v ip="$IP" '$2 == "("ip")" { print $4 }')
echo "$MAC"
while test $(arp -a | awk -v ip="$IP" '$2 == "("ip")" { print $4 }') = "$MAC"; do
   echo "Mac has not changed"
   sleep 2
done

您反复打印“Mac未更改”消息的观察结果是因为:是一个空命令,始终返回true并忽略(仅扩展)其参数。你的代码有效吗

while true; do
   echo echo "Mac has not changed"
   sleep 2
done