LINUX.ORG.RU

if then else fi но после иначе строка всё равно отрабатывается

 ,


1

2

Написал скрипт, для отправки внешнего IP на почту, добавил в crontab, теперь на почту постоянно приходит письмо, хотя, как я понимаю строка с командой отправки не должна отробатываться в скрипте если IP не изменяется

#!/bin/bash
IP_FILE="/root/bin/myip"
SMS_FILE="/root/bin/report"
OLD_IP=`cat $IP_FILE`
CURR_IP=$(wget -q -O - checkip.dyndns.org | sed -e 's/.*Current IP Address: //' -e 's/<.*$//')
echo "OLD_IP = $OLD_IP"
echo "CURR_IP = $CURR_IP"
if [ "$OLD_IP" = "$CURR_IP" ]
then
        echo "ip has not changed"
else
        echo "ip changed"
        echo $CURR_IP > $IP_FILE 
        echo "IP change $OLD_IP -> $CURR_IP" > $SMS_FILE
        sensors >> $SMS_FILE 
        mail -s "IP change $OLD_IP -> $CURR_IP" mymail@gmail.com < $SMS_FILE;
fi
Что я не так делаю?

Навскидку - сохраняешь и считываешь IP с переводом строки в файле.

Elyas ★★★★★
()

Замечание не по теме: mail в скрипте лишний. Cron сам по себе выхлоп stdout/stderr мылом отправляет.

Стоп! Таки по теме! ;) Со второго прочтения понял в чём вопрос.

Итого переделай так:

# ...
if [ "$OLD_IP" != "$CURR_IP" ]; then
        echo $CURR_IP > $IP_FILE 
        echo "IP change $OLD_IP -> $CURR_IP"
fi

beastie ★★★★★
()
Последнее исправление: beastie (всего исправлений: 3)
Ответ на: комментарий от beastie

Спасибо большое, за замечание по теме mail, а то я и думал, откуда шлётся весь stdout выполнения скрипта :) Подправил скрипт, пока так. Завтра подумаю как запускать скрипты не из crontab'а, на случай если не нужно отправлять почту )))

predbannikov
() автор топика

wget -q -O - checkip.dyndns.org | sed -e 's/.*Current IP Address: //' -e 's/<.*$//'

А так красивше. :)

curl -s checkip.dyndns.org | grep -o '[0-9.]\+'
# или с wget
wget -qO - checkip.dyndns.org | grep -o '[0-9.]\+'

P.S. Если вы используете баш (а единственное место это $(код) против `код`), то есть альтернатива достаточно запутанному выражению

[ "$OLD_IP" = "$CURR_IP" ]
Так:
[[ $OLD_IP == $CURR_IP ]]
Более си-подобно и глазу приятнее.

lexazloy
()
Ответ на: комментарий от Deleted

В баше именно двойное «==» (во встроенной конструкции «[[»). А «[» это обычная команда, альтернатива для команды test.

Попробуйте:

which [
Увидите:
/usr/bin/[

lexazloy
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.