我正在尝试创建一个 bash 脚本。
- 脚本要求用户提供 IP 地址
- 然后脚本会为 IP 地址所在的行搜索
arp -a
命令。 - MAC 地址保存为一个名为 MAC 的变量。
- 脚本检查 MAC 地址没有改变。
#!/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 地址改变了也是如此。
就在它循环之前出现错误:Xdetect.sh 9: Xdetect.sh: -a: not found
我该如何解决这个问题?
最佳答案
您的意思是 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 has not changed”被反复打印是因为 :
是一个空命令,它总是返回 true 并忽略(仅扩展)它的参数。实际上你的代码确实如此
while true; do
echo echo "Mac has not changed"
sleep 2
done
关于linux - 将 Mac 地址保存在 bash 脚本中的变量中并使用它来检查更改,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43352363/