Bash convert character em variável

3

Estou escrevendo um script de verificação personalizado collectd nagios no bash. O problema que estou tendo é que nagios mostra nomes de host como host.name.domain mas collectd contém arquivos WSP como host_name_domain. Minha pergunta é como posso fazer uma variável converter o nome do host que ele recebe do nagios (host.name.domain) para o formato collectd (host_name_domain).

Esta é a parte em que a conversão deve ocorrer. Portanto, o WSP_PATH forneceria o formato collectd do nome do host na variável $ NHOST

WSP_PATH=/var/lib/carbon/whisper/ctd/$NHOST/uptime/uptime.wsp
    
por mYzk 14.08.2014 / 09:50

2 respostas

4

Use 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

Como acima, / g é necessário para que todas as instâncias de. são substituídos por -

Embora pensando duas vezes, provavelmente faria mais sentido executar essa (sed) operação na variável $ NHOST (agora editada para mostrar isso)

    
por 14.08.2014 / 10:16
13

O Bash tem a funcionalidade necessária incorporada (a menos que seja uma versão antiga):

WSP_PATH=/var/lib/carbon/whisper/ctd/${NHOST//./-}/uptime/uptime.wsp
    
por 14.08.2014 / 11:13

Tags