Добавление счетчика в оболочку script
У меня есть код в моей оболочке script, который будет продолжать спать, если он не найдет файл. И он спит в течение получаса, но в настоящее время у меня нет счетчика, как только выполните код ниже 20 раз, а затем выйдите из программы, если файлов все еще нет (значит, ничего не делать после 20 проверок и выйти из полный script).
Какой лучший способ решить эту проблему? Так что мне также известно, глядя на письма, которые он пробовал 20 раз.
Надеюсь, я достаточно ясен.
while true; do
if /home/hadoop/latest/bin/hadoop fs -ls /apps/hdtech/bds/quality-rt/dt=$DATE_YEST_FORMAT2 then
echo "Files Present" | mailx -s "File Present" -r [email protected] [email protected]
break
else
echo "Sleeping for half an hour" | mailx -s "Time to Sleep Now" -r [email protected] [email protected]
sleep 1800
fi
done
Ответы
Ответ 1
Здесь вы можете реализовать счетчик:
counter=0
while true; do
if /home/hadoop/latest/bin/hadoop fs -ls /apps/hdtech/bds/quality-rt/dt=$DATE_YEST_FORMAT2 then
echo "Files Present" | mailx -s "File Present" -r [email protected] [email protected]
exit 0
elif [[ "$counter" -gt 20 ]]; then
echo "Counter: $counter times reached; Exiting loop!"
exit 1
else
counter=$((counter+1))
echo "Counter: $counter time(s); Sleeping for another half an hour" | mailx -s "Time to Sleep Now" -r [email protected] [email protected]
sleep 1800
fi
done
Некоторые пояснения:
-
counter=$((counter+1))
- так вы можете увеличивать счетчик. В этом случае $
для counter
является необязательным в двойных скобках.
-
elif [[ "$counter" -gt 20 ]]; then
- это проверяет, не превышает ли $counter
20
. Если это так, он выводит соответствующее сообщение и выходит из цикла while.
Ответ 2
Попробуйте следующее:
counter=0
while true; do
if /home/hadoop/latest/bin/hadoop fs -ls /apps/hdtech/bds/quality-rt/dt=$DATE_YEST_FORMAT2 then
echo "Files Present" | mailx -s "File Present" -r [email protected] [email protected]
break
elif [[ "$counter" -gt 20 ]]; then
echo "Counter limit reached, exit script."
exit 1
else
let counter++
echo "Sleeping for another half an hour" | mailx -s "Time to Sleep Now" -r [email protected] [email protected]
sleep 1800
fi
done
Объяснение
-
break
- если файлы присутствуют, он сломается и разрешит script обрабатывать файлы.
-
[[ "$counter" -gt 20 ]]
- если переменная счетчика больше 20, выход script будет завершен.
-
let counter++
- увеличивает счетчик на 1 на каждом проходе.