Colocando os mesmos dados de uma variável em sua própria linha?

0

Eu tenho um script que vou usar para o nosso FreePBX com sistema telefônico Asterisk. Gostaria de saber se alguma das nossas extensões / pontos de extremidade está off-line / indisponível, gostaria de receber essa informação em um e-mail.

#!/bin/bash

email="[email protected]"

offlineExtensions=$(asterisk -rx 'pjsip show contacts' | grep -i "unavail")

if [ "$offlineExtensions" ]
then
echo $offlineExtensions | mail -s "Extensions Offline" $email
fi

Meu e-mail parece com ...

Contact: 7101/sip:7101@IP_ADDRESS:5060 d20a378e88 Unavail 55.829 Contact: 7770/sip:7770@IP_ADDRESS:5060 174a796f10 Unavail 12.275

Gostaria que as informações dos contatos estivessem em sua própria linha separada, não concatenadas juntas. Eu usei o próximo símbolo de linha (\ n) no script, mas parece que não funciona.

Alguma idéia, por favor?

    
por Marc 26.10.2017 / 12:28

3 respostas

2

Seus contatos são concatenados porque você não citou $offlineExtensions em echo $offlineExtensions | ... . A variável tem as novas linhas intactas, mas depois a casca divide-a em palavras e depois une as palavras separadas por espaços. Para evitar isso, você precisa colocar $offlineExtensions entre aspas duplas. Pela mesma razão, é uma boa higiene também citar $email (embora deixá-lo sem aspas seja inofensivo nessa situação específica).

Um problema não relacionado escondido em seu script é que você está usando echo para imprimir uma variável com conteúdo desconhecido. Se $offlineExtensions começar com um traço - , echo aceitará isso como uma opção. Algumas implementações de echo permitem que você evite esse problema usando echo -- em vez de apenas echo , outras não. A maneira portátil de lidar com isso é usar printf em vez de echo .

Resumindo, substitua a linha echo ... por:

printf '%s\n' "$offlineExtensions" | mail -s 'Extensions Offline' "$email"
    
por 26.10.2017 / 12:43
0

Você deve tentar usar

pjsip show contact concise

Mas essa não é a melhor opção de qualquer maneira.

A melhor prática é parse / var / log / asterisk / messages ou arquivo completo (pode ser configurado para colocar o registro quando alguém for inacessível / alcançável).

A melhor prática é usar nagios ou outro monitoramento suave, não escrever o seu próprio.

    
por 27.10.2017 / 02:28
-1

Meu script final funciona. Obrigado.

#!/bin/bash

email="[email protected]"

offlineExtensions=$(asterisk -rx 'pjsip show contacts' | grep -i "unavail")

if [ "$offlineExtensions" ]
then
printf "$offlineExtensions" | mail -s 'Extensions Offline' "$email"
fi
    
por 26.10.2017 / 12:53