Подтвердить что ты не робот

Добавление счетчика в оболочку 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
4b9b3361

Ответ 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 на каждом проходе.