通过 for 循环插入主机检查
insert hosts in check via for loop
以下问题:
我们有一个名为 "file.conf"
的文件
192.168.30.1|192.168.30.1|os
_网关|192.168.30.2|Linux 2.6.18 - 2.6.22
...
第一个是hostname 第二个是ipv4
现在我们有一个脚本,他应该通过来自 checkMK
的自动用户自动插入 hosts 和 ip
#!/bin/bash
FILE=filename
source $FILE
for i in ${FILE}
do
HOSTNAME=$(cat $i | cut -d '|' -f1)
IP=$(cat $i | cut -d '|' -f2)
curl "http://checkmkadress/check_mk/host&user" -d 'request={"hostname":"'"$HOSTNAME"'","folder":"ansible","attributes":{"ipaddress":"'"$IP"'","site":"sitename","tag_agent":"cmk-agent"}}'
done
但是如果我们这样做,我们会得到以下错误,因为他尝试将每个 host 放入 host 中,将每个 ip 放入 ip 中,而无需遍历所有行
{"result": "Check_MK exception: Failed to parse JSON request: '{\"hostname\":\"allhostnames":{\"ipaddress\":all_ips\",\"site\":\"sitename\",\"tag_agent\":\"cmk-agent\"}}': Invalid control character at: line 1 column 26 (char 25)", "result_code": 1}
我们如何让 curl 脚本遍历每一行以分别获取 host 和 ip
利用你已经做过的,按这种方式尝试。
FILE="filename"
source $FILE
while read line
do
HOSTNAME=$(echo $line | cut -d '|' -f1)
IP=$(echo $line | cut -d '|' -f2)
#your curl command here
done <$FILE
或者,我更喜欢
while IFS='|' read -r host ip description
do
#your curl command here
echo "$host : $ip : $description"
done <$FILE
以下问题:
我们有一个名为 "file.conf"
的文件192.168.30.1|192.168.30.1|os _网关|192.168.30.2|Linux 2.6.18 - 2.6.22 ...
第一个是hostname 第二个是ipv4
现在我们有一个脚本,他应该通过来自 checkMK
的自动用户自动插入 hosts 和 ip#!/bin/bash
FILE=filename
source $FILE
for i in ${FILE}
do
HOSTNAME=$(cat $i | cut -d '|' -f1)
IP=$(cat $i | cut -d '|' -f2)
curl "http://checkmkadress/check_mk/host&user" -d 'request={"hostname":"'"$HOSTNAME"'","folder":"ansible","attributes":{"ipaddress":"'"$IP"'","site":"sitename","tag_agent":"cmk-agent"}}'
done
但是如果我们这样做,我们会得到以下错误,因为他尝试将每个 host 放入 host 中,将每个 ip 放入 ip 中,而无需遍历所有行
{"result": "Check_MK exception: Failed to parse JSON request: '{\"hostname\":\"allhostnames":{\"ipaddress\":all_ips\",\"site\":\"sitename\",\"tag_agent\":\"cmk-agent\"}}': Invalid control character at: line 1 column 26 (char 25)", "result_code": 1}
我们如何让 curl 脚本遍历每一行以分别获取 host 和 ip
利用你已经做过的,按这种方式尝试。
FILE="filename"
source $FILE
while read line
do
HOSTNAME=$(echo $line | cut -d '|' -f1)
IP=$(echo $line | cut -d '|' -f2)
#your curl command here
done <$FILE
或者,我更喜欢
while IFS='|' read -r host ip description
do
#your curl command here
echo "$host : $ip : $description"
done <$FILE