0

我需要一个 Bash 脚本来接受代表hhmmss格式时间的 1 个参数,并在此之前 3 分钟派生第二个时间。

我一直在尝试使用date -d

#! /bin/bash
DATE=`date +%Y%m%d`
TIME=$1
NEWTIME=`date -d "$DATE $TIME - 3 minutes" +%H%M%S`
echo $NEWTIME

在行动:

$ ./myscript.sh 123456
invalid date `20141022 123456 - 3 minutes'

似乎问题在于 6 个字符的时间格式,因为 4 个字符(例如 1234)有效。3 分钟的减法不是问题,因为我在删除它时遇到了同样的错误。

我突然想到,我可以将时间解析为更可口的格式,然后再发送到date. 我尝试通过添加以下行来插入分隔符:

TIME=${TIME:0:2}:${TIME:2:2}:${TIME:4:2}

它接受了这种格式,但该- 3 minutes部分的答案莫名其妙地非常错误(它减去了 2 小时 1 分钟):

$ ./myscript.sh 123456
103356

烦人。

我还想到我可能能够提供date一种输入格式,就像strptime我在 Python 中熟悉的那样。我在strptimeBash 的上下文中找到了引用,但我无法让它做任何事情。

有没有人有任何关于让hhmmss时间字符串工作的建议?任何帮助深表感谢。

仅供参考:我试图避免更改 6 字符输入格式,因为这将涉及更改其他脚本以及让某些人类用户改变长期根深蒂固的习惯。我也试图避免将此任务外包给另一种语言。(我可以很容易地在 Python 中做到这一点)。如果有的话,我想要一个 Bash 解决方案来解决这个问题。

4

1 回答 1

3
TIME=093000
TIME=${TIME:0:2}:${TIME:2:2}:${TIME:4:2}         # your line
date -d "2014-10-20 $TIME 3 mins ago" +%H%M%S

输出:

092700
于 2014-10-23T00:04:18.917 回答