Bash for 循环确实会永远运行

Bash for 循环确实会永远运行

我编写了一个脚本,在一定时间后向我发送通知。以下是不起作用的部分(稍后将重点介绍重要内容):

if [[ $choice == "-c" ]]
then

  timer=$2
  if [[ $5 == "-m" ]]
  then
    timer=$(( $2 * 60 ))
  fi
  echo $timer

  if [[ $5 == "-h" ]]
  then
    timer=$(( $2 * 3600 ))
  fi

  echo "Notification will be send in:" $timer "Second(s)"
  for (( index = 0; index < $timer; index++ ))
  do
    sleep 1
  done
  notify-send -t $time $msg
fi

我使用以下方式调用脚本

./scriptname <type> <time it should run> [message] [set the time to m/h]

这里的类型无关紧要,因为它执行正确的 if 块。它应该运行的时间是它等待通知发送的时间。将时间设置为 m/h 是一个简单的参数。如果我在这里什么都不提供,时间将以秒为单位给出(它总是如此,但用户输入不会改变)。

好的。$msg变量包含要发送的消息。 $2是时间输入。 $choice并不重要,它所做的只是选择要执行的正确代码(并且程序出现在此 if 语句中) $5包含“-m”或“-h”(无也是一个选项),然后$timer变量会按以下内容增加。

问题是,如果我想在几分钟内得到它(“-m”代表什么意思)。程序将执行此语句:

if [[ $5 == "-m" ]]
then
  timer=$(( $2 * 60 ))
fi

echo $timer知道它有效,但我遇到的问题是脚本不会停止运行。当我使用给定的输入执行它时,它运行完美。(因此程序不会进入变量的任何 if 语句$timer。)但如果我说时间应该被视为分钟或小时(仅用分钟测试)它不起作用,或者更正确地说它只是不会覆盖变量$timer有人知道为什么吗?

编辑:我完全忘记了我以每次 4 美元的价格实现了显示消息。我完全忘记了,所以我实际上用以下方式调用了脚本。

./scriptname <type> <time it should run> [message] [time the message gets shown] [set time to m/h]

是的,我不需要 for 循环。我可以用sleep $timer

相关内容