2013-06-06 3 views
0

У меня есть два утверждения IF, которые должны быть «Hitting/Triggering», но что-то не кошерно в моем коде. Я просто изучаю БАШ и ценю любую помощь.Почему этот оператор IF не работает?

У меня есть два массива, созданных ранее в коде,

#Array of Dates 
DATES=($(awk -F'/' '{print $2}' "${TEMPFILE}")) 
#Array of IP's 
IPS=($(awk '{print $2}' "${TEMPFILE}")) 

Поскольку они созданы из того же файла, они имеют одинаковую длину.

Пример из двух массивов:

01 06 07 08 11 23 24 
192.168.0.4 192.168.0.6 192.168.0.4 192.168.0.5 192.168.0.6 192.168.0.4 192.168.0.5 

В своем выступлении я разбор через журнал Bluecoat, и заявление IF будет проверять, если IP изменился по сравнению с массивов (сформированных из журнала DHCP разбора). Кажется, что все работает (просмотр результатов на выходе), за исключением того, что инструкции IF не запускаются, поэтому IP никогда не изменяется.

Вот мой код для поиска целого месяца (в день, в то время)

ARRAY_COUNTER=1 

NEW_GREP_TERM=${IPS[0]} 

for i in {01..31} 
do 
    SEARCHPATH=${BASEPATH}/${DEF_YEAR}${DEF_MONTH}/SG_OIG__22[8-9]${DEF_MONTH}${i}* 
    zgrep --no-filename $NEW_GREP_TERM $SEARCHPATH | awk -f /usr/local/bin/cvsit.awk >> $OUTFILE 

     if [[ "${i}" == "${DATES[$ARRAY_COUNTER]}" ]]; then 

      if [[ "${IPS[$ARRAY_COUNTER]}" != "${IPS[$ARRAY_COUNTER-1]}" ]]; then 
       echo -e "Change IP" 
       NEW_GREP_TERM=${IPS[$ARRAY_COUNTER]} 
       zgrep --no-filename $NEW_GREP_TERM $SEARCHPATH | awk -f /usr/local/bin/cvsit.awk >> $OUTFILE 

      fi 
     ARRAY_COUNTER++ 
     fi 
done 
+0

Вы можете вставить образец ввода, поэтому мы можем запустить скрипт? См. [Short, Self Contained Correct Example] (http://sscce.org/). – choroba

+0

Убедитесь, что 'DATES' содержит то, что вы ожидаете. Утвердите, что 'i' содержит то, что вы ожидаете. Вход, наблюдаемый выход, ожидаемый выход. Минимизируйте объем кода, необходимый для выявления вашей наблюдаемой проблемы. Отладка 101. – DevSolar

+1

Попробуйте запустить в режиме отладки (используя 'set -x') и увидеть значение в нем. – unxnut

ответ

1

Вы должны двойная (()) вокруг всего, что делает математику в Баше.

Таким образом, вместо

ARRAY_COUNTER++ 

вам нужно

((ARRAY_COUNTER++)) 

Вот полный скрипт:

ARRAY_COUNTER=1 

NEW_GREP_TERM=${IPS[0]} 

for i in {01..31} 
do 
    SEARCHPATH=${BASEPATH}/${DEF_YEAR}${DEF_MONTH}/SG_OIG__22[8-9]${DEF_MONTH}${i}* 
    zgrep --no-filename $NEW_GREP_TERM $SEARCHPATH | awk -f /usr/local/bin/cvsit.awk >> $OUTFILE 

     if [[ "${i}" == "${DATES[$ARRAY_COUNTER]}" ]]; then 

      if [[ "${IPS[$ARRAY_COUNTER]}" != "${IPS[$ARRAY_COUNTER-1]}" ]]; then 
       echo -e "Change IP" 
       NEW_GREP_TERM=${IPS[$ARRAY_COUNTER]} 
       zgrep --no-filename $NEW_GREP_TERM $SEARCHPATH | awk -f /usr/local/bin/cvsit.awk >> $OUTFILE 

      fi 
     ((ARRAY_COUNTER++)) 
     fi 
done