Voila qui devrait répondre à ton besoin, commenté (un peu) en plus!
#!/bin/bash
#shortsurvip.sh.sh v0.0.2
#####################
### CONFIGURATION ###
#####################
DESTINATAIRE="destinataire@ndd.tld"
EMETTEUR="Serveur xxx <expediteur@ndd.tld>"
# listes de sites retournant l'IP WAN
SITES=("http://checkip.amazonaws.com" "https://api.ipify.org/" "http://ipecho.net/plain" "http://icanhazip.com/" "http://ipinfo.io/ip" "https://wtfismyip.com/text" "http://whatismyip.akamai.com/" "https://ipv4bot.whatismyipaddress.com" "https://www.dsfc.net/ipinfo.php" "http://api.ipaddress.com/myip")
# fichier de memo de l'IP
MEMOIPFILE="/volume1/script/forum/survip/dsm/ip.txt"
LOGFILE="/volume1/script/forum/survip/dsm/ip.log"
# Fichier temporaire pour messagerie
MSGFILE="/volume1/script/forum/survip/dsm/message.txt"
#################
### FONCTIONS ###
#################
memoriser_IP()
{
echo $new_ip > $MEMOIPFILE
}
lire_old_ip()
{
if test -f "$MEMOIPFILE"; then
old_ip=`cat $MEMOIPFILE` #lecture ancienne IP si fichier ip.txt existe
fi
}
lire_ip_wan()
{
nbTest=0
ip_lue_valide=1
# boucle sur les sites pour en trouver un retournant une IP valide
until [[ $ip_lue_valide -eq 0 || $nbTest -eq $nbSites ]];do
ip_lue=`curl -s -L ${SITES[($[($1 + $nbTest) % $nbSites])]}`
if [[ $ip_lue =~ ^[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}$ ]]; then # test si reponse est une IP
ip_lue_valide=0
else
((nbTest++))
sleep 1 #utile?
fi
# repositine pointeur sur le suivant du dernier consulté
idSite=($[($1 + $nbTest) % $nbSites + 1])
done
}
envoi_mail()
{
# contenu du message
body=`printf "Bonjour,\r\n\rVotre adresse IP publique a changé !\r\n\r\nVotre ancienne adresse IP était : $old_ip\r\nVotre nouvelle adresse IP est : $new_ip\r\n\r\nCordialement..."`
echo -e "to:${DESTINATAIRE}">${MSGFILE};
echo -e "from:${EMETTEUR}">>${MSGFILE};
echo -e "subject:${sujet} ">>${MSGFILE};
echo -e "${body}" >> ${MSGFILE};
ssmtp -v ${DESTINATAIRE} < ${MSGFILE};
rm ${MSGFILE}
}
inscription_log()
{
echo "----------------------" >> $LOGFILE
echo $(date +"%d/%m/%Y à %H:%M:%S") >> $LOGFILE
echo "----------------------" >> $LOGFILE
echo ${sujet} >> $LOGFILE
echo "Votre ancienne adresse IP était : $old_ip" >> $LOGFILE
echo "Votre nouvelle adresse IP est : $new_ip" >> $LOGFILE
}
###############
### SCRIPT ###
###############
nbSites=${#SITES[@]}
idSite=$(( $RANDOM % $nbSites ))
lire_old_ip
lire_ip_wan $idSite
if [ $ip_lue_valide -eq 0 ]; then # si IP lue valide
if [ "${old_ip}" != "${ip_lue}" ]; then # si IP changée
new_ip=$ip_lue #IP à confirmer
ip_lue_valide=1
bcl=0
# recherche autre site fournissant une IP valide
until [[ $ip_lue_valide -eq 0 || $bcl -eq $nbSites ]];do
((bcl++))
lire_ip_wan $idSite
done
if [ "${ip_lue}" == "${new_ip}" ]; then # si nouvelle IP confirmée
memoriser_IP
sujet="Votre adresse IP publique (IPv4) a changé !"
inscription_log
envoi_mail
fi
fi
fi
exit 0