0

我对 shell 脚本非常陌生。如果作为命令行参数的给定时间等于系统时间,则脚本应该触发命令,否则它应该等待(轮询)给定时间。

我从非常基础的开始,但我只被困在这里:-(

#!/bin/sh

now=$(date +%k%M)
cur="055" # should be given as command line arg
if ($now == $cur)
then
    echo "Fire command here"
else
    echo "poll for time"
fi

当我执行脚本时:

./script.sh: line 5: 055: command not found

poll for time

谢谢您的帮助。

4

5 回答 5

3

我认为以上只是一个小的语法错误,而不是:

if ($now == $cur)

您可能想要这样做:

if [ $now -eq $cur ]  #very basic comparison here, you may want to have a
                      #look at the bash comparisons

更新 您可以将变量更改为,

$cur=$(date +%H%M)

如果输入不是您提供的,您应该删除前面的空格$now

now=$(echo $now | sed 's/\s//g') #this removes the spaces in the input
于 2013-09-02T14:07:46.850 回答
0

您描述的问题似乎正是 crontab 旨在处理的问题,来自维基百科“Cron 由 crontab(cron 表)文件驱动,该文件是一个配置文件,指定 shell 命令按给定的时间表定期运行。”

这是一个快速参考,它是相对准系统,但应该足以确定它是否满足您的需求。

于 2013-09-02T15:25:02.273 回答
0

您可以使用以下命令在特定时间运行程序:

crontab -e

0 14 * * * command

运行command@ 14 PM(通过示例)

于 2013-09-02T14:14:17.373 回答
0

使用以下代码

如果 [ $now == $cur ]

于 2014-10-14T06:58:45.150 回答
0
begin="`date '+%s'`"
final=... #should be converted to seconds since epoch...
sleep $((final - begin))
exec_your_command
于 2013-09-02T14:21:14.003 回答