2013-07-29 4 views
0

im пытается выяснить, b/c иногда пинг будет работать, но это b/c его просто reg. ICMP, но когда реальный трафик пытается пройти через туннель, он не будет работать b/c, есть 2-3 туннеля вверх. Я хочу использовать туннели IF $> 1 AND $ tunnels == 0, чтобы сделать перезапуск IPSec ниже.Сценарий проверки туннелей - Awk

не так просто

#!/bin/bash 

echo begin ping 

ping -c 3 -w 3 -t 2 192.168.1.4 &> /dev/null ; 

service ipsec status | awk 'NR==3' | cut -d" " -f1 $tunnels 

if 

     [ $? == 0 ] 

then 
     echo "Connection is up" >> /root/restart_ipsec.log 

else 

     echo "Connection is down" >> /root/restart_ipsec.log 

     date >> /root/restart_ipsec.log; 

     /sbin/service crond stop >> /root/restart_ipsec.log; 

     /sbin/service ipsec stop >> /root/restart_ipsec.log; 

     sleep 120; 

     /sbin/service ipsec start >> /root/restart_ipsec.log; 

     /sbin/service crond start >> /root/restart_ipsec.log; 

fi 

я попытался это, но он продолжает использовать первый, если что не важно. даже если я скажу, что количество туннелей больше 1 или 0, оно все еще использует этот оператор. Что дает!?

tunnels=$(service ipsec status | awk 'NR==3' | cut -d" " -f1 | sed -e 's/^[ ]*//') 
a=0 
if 
     (($tunnels > $a)); 
then 
     echo "To many tunnels =" $tunnels >> /root/restart_ipsec2.log; 
     echo $a; 
elif 
     [ $tunnels == 0 ] 
then 
     echo "To many tunnelss =" $tunnels >> /root/restart_ipsec2.log 
elif 
     echo "luis3"; 
     [ $? == 0 ] 
then 
     echo "Connection is up" >> /root/restart_ipsec2.log 
else 
     echo "Connection is down" >> /root/restart_ipsec2.log 
fi 
+0

'[$? == 0] 'проверяет, удалось ли« вырезать ». Это то, что вы хотите? Расскажите, пожалуйста, на простом английском языке, что вы пытаетесь сделать, чтобы мы могли помочь вам. –

+0

$? == 0 спрашивает, ответил ли пинг или нет, НО мне также нужно выяснить, сколько туннелей ipsec имеет. если 1 это нормально, если более 1 ИЛИ 0 для перезапуска службы. – Luis

+0

$? это статус выхода последней команды запуска, которая 'cut' в вашем скрипте, а не' ping'. –

ответ

1

Попробуйте [ $? -eq 0 ], так как это числовое сравнение.

Кроме того, эта линия:

service ipsec status | awk 'NR==3' | cut -d" " -f1 $tunnels 

не делает много смысла. Если вы хотите, чтобы напечатать первое поле, то сделать:

service ipsec status | awk 'NR==3{print $1}' 

, что я не знаю, является использование $tunnels в линии у вас есть.

+0

im, определяющий переменные $ tunnels с выходом выше. я протестировал его, так что прямо сейчас 1 туннели до $ tunnels будут равны 1. так что если его больше 1 ex; 2 3 или 4, чтобы перезапустить ipsec ИЛИ, если также перезапустить его. – Luis

+0

Переменная не может быть определена так. Вам лучше сделать 'tunnels = $ (service ipsec status | awk 'NR == 3 {print $ 1}')' – fedorqui

+0

hmm. это может быть лучше. но я не уверен, что b/c я делаю if, else if else и я получаю ошибки. – Luis