繁体   English   中英

在bash / shell脚本中增加时间(分钟和秒)

[英]Incrementing time (minutes and seconds) in bash / shell script

我需要在变量中增加分钟和秒(与时间相关)。

首先,我不确定是否将'time'变量声明为

time="00:00:00" 

要么

 time=$(date +00:00:00)?

从那里开始,我希望将此变量增加10分钟和秒

01:00:00增加到
时间01:10:10
01:20:20等(一直到午夜 - 00:00:00)

实现这一目标的最佳方法是什么?

我知道做$ date -d "2010-07-07 200 days"会增加(200)天,但我不知道如何将这个例子应用于时间(分钟和秒)而不是日期?

所有回复都非常感谢。

请注意,这只是Linux。 在BSD unix(以及可能的其他人)上的date -d做了一些显着不同的事情(和不幸的事情)。

您可以使用纪元时间 - 即自1970年1月1日00:00:00以来的秒数,例如:

#!/bin/bash

time=0
echo `date -d "1970-01-01 00:00:00 UTC $time seconds" +"%H:%M:%S"`
time=$((time + 600))
echo `date -d "1970-01-01 00:00:00 UTC $time seconds" +"%H:%M:%S"`
time=$((time + 600))
echo `date -d "1970-01-01 00:00:00 UTC $time seconds" +"%H:%M:%S"`

给出这个输出:

$ /tmp/datetest.sh
00:00:00
00:10:00
00:20:00
$

date命令不是bash的一部分。 它由您的操作系统提供,其行为在不同的操作系统中有所不同。 值得注意的是,GNU coreutils日期(在大多数Linux发行版中)有一个-d选项用于解释源日期,而BSD日期有一个-f选项用于解释特定格式的输入日期,而-v选项用于按各种单位调整时间。

您已经获得了Linux选项的可接受答案。 要完成这个,这是一个BSD(和macOS)选项:

$ for (( s=0; s<86400; s+=610 )); do date -j -v+${s}S -f '%H:%M:%S' "$time" '+%T'; done | head -5
00:00:00
00:10:10
00:20:20
00:30:30
00:40:40

这里的输出显然被修剪为5行。

当然,这仍然是特定于平台的。 如果你想要任何可以在任何地方使用bash的东西,那么只要你使用bash> 4.2,以下可能会:

$ offset=$(printf '%(%z)T\n' 0)
$ for (( s=$(( ${offset:1:2}*3600 + ${offset:3}*60 )); s<86400; s+=610 )); do printf '%(%T)T\n' "$s"; done | head -5
00:00:00
00:10:10
00:20:20
00:30:30
00:40:40

$offset变量允许我们补偿您可能不是UTC的事实。 :)与date解决方案一样,此步骤增加610秒,但它使用printf%T格式生成输出。 您可以将时区偏移量添加或减去86400终点以获得一整天的时间。 处理这是留给读者的练习。 :-)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM