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

标签 linux bash shell unix

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

  1. 脚本要求用户提供 IP 地址
  2. 然后脚本会为 IP 地址所在的行搜索 arp -a 命令。
  3. MAC 地址保存为一个名为 MAC 的变量。
  4. 脚本检查 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/

相关文章:

python - 如何从 Python 代码创建 Unix 和 Linux 二进制文件

regex - 在 perl 正则表达式中获取并运行 shell 函数

linux - Aliasing `grep -w ' label for '` 只搜索第一个词(label)

linux - bash shell 自动创建用户 - adduser

c - 我对 read() 和 write() 做错了什么?

c - 试图杀死一个生成的进程以一个已失效的进程结束

linux - 更改 GNU-Screen 中的 Ctrl-D 快捷键

Bash函数来处理目录中不包括目录的所有点文件

linux - 使用数字排序合并 pdf 文件

python - 在 Python 子进程中的 docker 中运行交互式命令