데이터베이스에 연결하고 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')