我正在用 bash 编写 collectd nagios 自定义检查脚本。我遇到的问题是 nagios 将主机名显示为 host.name.domain,但 collectd 将 WSP 文件保存为 host_name_domain。我的问题是如何让变量将从 nagios (host.name.domain) 获得的主机名转换为 collectd 格式 (host_name_domain)。
这是必须进行转换的部分。因此,WSP_PATH 将在变量 $NHOST 中给出 collectd 格式的主机名
WSP_PATH=/var/lib/carbon/whisper/ctd/$NHOST/uptime/uptime.wsp
答案1
使用 sed:
$ NHOST="host.domain.tld"
$ NHOST=$(echo $NHOST | sed 's/\./-/g')
$ WSP_PATH=/var/lib/carbon/whisper/ctd/$NHOST/uptime/uptime.wsp
$ echo $WSP_PATH
/var/lib/carbin/whisper/ctd/host-domain/uptime/uptime.wsp
如上所述,/g 是必需的,以便所有 . 实例都替换为 -
尽管再三考虑,对 $NHOST 变量执行此 (sed) 操作可能更有意义(现在已编辑以显示这一点)
答案2
Bash 内置了所需的功能(除非是古老版本):
WSP_PATH=/var/lib/carbon/whisper/ctd/${NHOST//./-}/uptime/uptime.wsp