У меня есть два утверждения 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
Вы можете вставить образец ввода, поэтому мы можем запустить скрипт? См. [Short, Self Contained Correct Example] (http://sscce.org/). – choroba
Убедитесь, что 'DATES' содержит то, что вы ожидаете. Утвердите, что 'i' содержит то, что вы ожидаете. Вход, наблюдаемый выход, ожидаемый выход. Минимизируйте объем кода, необходимый для выявления вашей наблюдаемой проблемы. Отладка 101. – DevSolar
Попробуйте запустить в режиме отладки (используя 'set -x') и увидеть значение в нем. – unxnut