【发布时间】:2023-03-06 12:38:01
【问题描述】:
我有一个无限循环,我只想在用户按下 Ctrl - C 时退出。
但是我的 while 循环中有 2 个计数器,当我退出 while 循环时,我想打印出它们的值。
OK_COUNT=0
NOK_COUNT=0
while :
do
RESULT=`curl -s http://${IP}${ENDPOINT} --max-time 1`
if [ $RESULT == '{"status":"UP"}' ]
then
(( OK_COUNT+=1 ))
echo "`date` :: ${ENDPOINT} is OK ! Total count is $OK_COUNT "
else
(( NOK_COUNT+=1 ))
echo "`date` :: ${ENDPOINT} is UNREACHABLE ! Total count is $NOK_COUNT"
fi
sleep 0.5
done
echo $OK_COUNT
echo $NOK_COUNT
现在,当我按下 Ctrl + C 时,我也会退出 while 循环并退出脚本。这意味着最后 2 个 echo 语句不会被打印出来。
有没有一种方法,如果我按 Ctrl + C,我只退出 while 循环,但脚本的其余部分仍然运行?
编辑/解决方案 ::
添加trap后,就可以了!
OK_COUNT=0
NOK_COUNT=0
trap printout SIGINT
printout() {
echo $OK_COUNT
echo $NOK_COUNT
exit
}
while :
do
RESULT=`curl -s http://${IP}${ENDPOINT} --max-time 1`
if [ $RESULT == '{"status":"UP"}' ]
then
(( OK_COUNT+=1 ))
echo "`date` :: ${ENDPOINT} is OK ! Total count is $OK_COUNT "
else
(( NOK_COUNT+=1 ))
echo "`date` :: ${ENDPOINT} is UNREACHABLE ! Total count is $NOK_COUNT"
fi
sleep 0.5
done
使用上面的代码,当我用 Ctrl + C 退出代码时,我得到了。
Wed Oct 18 18:59:13 GMT 2017 :: /cscl_etl/health is OK ! Total count is 471
Wed Oct 18 18:59:13 GMT 2017 :: /cscl_etl/health is OK ! Total count is 472
^C
5
0
#
【问题讨论】:
标签: bash