shell 脚本 - 在退出无限循环之前完成迭代

Posted

技术标签:

【中文标题】shell 脚本 - 在退出无限循环之前完成迭代【英文标题】:shell script - complete iteration before exiting infinite loop 【发布时间】:2014-07-19 07:55:04 【问题描述】:

我对 shell 脚本非常陌生,需要帮助。

我想运行一些带有无限循环的命令,并且我希望在按下 ctrl-c 时终止循环,但在终止之前我希望完成当前迭代(意味着应该执行循环中的所有语句。

infinite-loop (
   command 1;
   command 2; 
   command 3;
loop-ends

在执行的任何时候按 ctrl-c,所有 3 个命令都应该在循环终止之前执行。如果没有按下 ctrl-c,循环应该继续执行。

有什么建议吗??

【问题讨论】:

【参考方案1】:

您可以使用trap 来捕获 SIGINT 信号。 (已测试)

#!/bin/sh

trap ctrl_c INT

ctrl_c () 
  RUNNING=0


RUNNING=1

while [  "$RUNNING" = 1 ]; do
  echo 'working'
  sleep 1
  echo 'on something else'
  sleep 1
  echo 'done'
done

【讨论】:

【参考方案2】:

像这样(未经测试)

#!/bin/bash
trap "DONE=1" SIGINT
DONE=0
while [ $DONE -eq 0 ]
do
    process1
    process2
    process3
done

【讨论】:

以上是关于shell 脚本 - 在退出无限循环之前完成迭代的主要内容,如果未能解决你的问题,请参考以下文章

shell脚本,提示用户输入一个用户名,如果存在;显示用户UID和SHELL信息;否则,则显示无此用户;显示完成之后,提示用户再次输入;如果是quit则退出;

shell脚本--------while循环语句

运行无限循环并从“外部”获取命令(例如 shell 或其他脚本)

[转]Shell脚本之无限循环的两种方法

Shell基础:使用for循环结构使用while循环结构基于case分支编写脚本使用Shell函数中断及退出

如何从输出到前景的Bash脚本运行无限循环