Ajuda a depurar meu script bash

0

Eu escrevi um script (meu primeiro) que visa substituir um endereço IP em um arquivo de configuração bind sempre que ele detecta que o IP que aparece no arquivo não é o mesmo que o IP externo atual. Eu tenho meu próprio domínio, mas nenhum endereço IP estático, então esse script resolve as coisas.

O script:

#!/bin/bash

###
### Obtains the current external IP, compares it against the defined
### IPs in the bind config file and, if they do not match, 
### it modifies them
###

##
## Variables
##

# File to be modified
currfile=/etc/bind/zones/db.nahue.com.ar
# Current external IP
currextip=$(wget http://ipinfo.io/ip -qO -)
# Current bind config file IP
currbindip=$(cut -f6 $currfile | head -15 | tail -1)
# Current serial number
currbindser=$(cut -f 4 $currfile | head -6 | tail -1)
# Current serial number substring
currbindsersub=$(expr substr $currbindser 1 8)
# Same date serial plus one
newserial1=$(expr $currbindser + 1)
# Current date YYYYMMDD
currdate=$(date +%Y%m%d)
# Current date serial format YYYYMMDDXX
newserial=$(date +%Y%m%d)01

if [ "$currextip" != "$currbindip" ]
then
    sed -i -e "s:$currbindip:$currextip:g" "$currfile"
    if [ "$currbindsersub" = "$currdate" ]
    then
        sed -i -e "s:$currbindser:$newserial1:g" "$currfile"
    else
        sed -i -e "s:$currbindser:$newserial:g" "$currfile"
    fi
    service bind9 restart
    exit
else
    exit
fi

Aparentemente, em algum momento, ele se comporta mal e deixa o arquivo de configuração bind sem nenhum endereço IP.

Aqui, o arquivo de configuração que estou tentando modificar:

;
; bind file for nahue.com.ar
;
$TTL    900
nahue.com.ar.      IN      SOA     ns1.nahue.com.ar.    hostmaster.nahue.com.ar. (
                        2016010403      ;Serial
                        300             ; Refresh
                        60              ; Retry
                        2419200         ; Expire
                        900 )           ; Negative Cache TTL

; Name servers
@               IN      NS              dns1-npastorale.no-ip.org.
@               IN      NS              dns2-npastorale.no-ip.org.
@               IN      A               190.245.154.174 ; Script control line
a               IN      A               190.245.154.174
b               IN      A               190.245.154.174
c               IN      A               190.245.154.174
@               IN      MX      10      a.nahue.com.ar.

Espero que você possa me ajudar a descobrir isso, e espero ter explicado o problema corretamente.

Obrigado antecipadamente!

    
por Nahue 04.01.2016 / 15:06

1 resposta

0

É possível que o link em algum momento falhe e não retorne nada. De qualquer forma, você deve pelo menos fazer uma verificação mínima no valor $ currextip antes de passá-lo para sed.

Adicionar algo assim deve ser suficiente:

if [ -z $currextip ]; then
    echo "Something went wrong with ipinfo.io!"
    exit
fi

Não sei se essa é realmente a causa do seu problema, mas você deve sempre verificar se há casos de falha.

Como observação, você não deve usar o separador ":" com sed neste contexto, porque se você receber um IPv6 em algum momento, as coisas podem ficar realmente erradas.

    
por Nicolas Delvaux 04.01.2016 / 15:53