我创建了一个 shell 脚本来连接到数据库并从 dhcpd.log 文件插入 IP 和 MAC:
#/!bin/bash
dhcpLogFile="/var/log/dhcpd.log"
NumberOfLines=$(awk '/DHCPACK/ { print $8} ' $dhcpLogFile | awk '!x[$0]++'|awk 'BEGIN{i=0}{i++;}END{print i}')
j=1
while [ $NumberOfLines -gt 0 ]
do
ip=$(awk '/DHCPACK/ { print $8} ' $dhcpLogFile | awk '!x[$0]++' |cut -f$j -d$'\n')
mac=$(awk '/DHCPACK/ { print $10} ' $dhcpLogFile | awk '!x[$0]++' |cut -f$j -d$'\n')
let "j +=1"
let "NumberOfLines -=1"
mysql -u root --password='pw' MatchingDB <<- _END_
INSERT INTO IP_MACTable (IP_Address, MAC) VALUES ('$ip','$mac');
_END_
done
我的问题是如何修改上面的插入查询,使其在 ip 属性重复时替换现有记录,并在 ip 属性不重复时正常插入新记录?
我已经尝试过类似的方法,但它不断返回错误(语法错误):
INSERT INTO IP_MACTable (IP_Address, MAC) VALUES ('$ip','$mac')
ON DUPLICATE KEY UPDATE MAC = VALUES('$mac')
根据我的服务器的错误是near '$mac')
错误代码是#1064
答案1
您可以将插入修改为类似的内容,
INSERT INTO IP_MACTable (IP_Address, MAC) VALUES ('$ip','$mac')
ON DUPLICATE KEY UPDATE MAC = VALUES('$mac')