加计数器在shell脚本(Adding Counter in shell script)

2019-08-03 08:27发布

下面我有我的shell脚本的代码,会继续睡觉,如果它不找到任何文件。 它睡了半小时,但目前我没有任何反像只执行下面的代码20次,然后退出程序。如果文件仍是不存在(后20个检查手段没有做任何事情,并退出完整的脚本)。

怎样做这个问题的最好方法是什么? 所以,我也很清楚知道通过看,它已经试过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 admin@host.com admin@host.com
       break
  else
       echo "Sleeping for half an hour" | mailx -s "Time to Sleep Now"  -r admin@host.com admin@host.com
       sleep 1800
  fi
done

Answer 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 admin@host.com admin@host.com
       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 admin@host.com admin@host.com
       sleep 1800
  fi
done

几点说明:

  • counter=$((counter+1)) -这是你可以增加一个计数器。 在$counter在这种情况下,双括号内可选的。
  • elif [[ "$counter" -gt 20 ]]; then elif [[ "$counter" -gt 20 ]]; then -此检测是否$counter不大于20 。 如果是这样,它输出相应的消息,跳出while循环。


Answer 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 admin@host.com admin@host.com
       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 admin@host.com admin@host.com
       sleep 1800
  fi
done

说明

  • break -如果文件存在,这将打破,并允许脚本处理的文件。
  • [[ "$counter" -gt 20 ]] -如果计数器变量大于20时,该脚本将退出。
  • let counter++ -递增1在每一道次的计数器。


文章来源: Adding Counter in shell script
标签: bash shell