我想要一个带有指定时间参数的 shell 脚本。在我开始编写自己的代码之前,是否已经有一种将时间表达式(例如:1d、34m、3s、0.456h 或 23ms)转换为毫秒或小时的方法?我主要使用 Ubuntu,但其他特定于操作系统的解决方案也很有趣。
涉及其他工具(如 perl、python 或 awk)则没有问题。
答案1
好吧,这里有一个快速的 Perl 示例,将以下格式的字符串转换为毫秒:“Ad Bh Cm Ds”,其中 A、B、C 和 D 分别表示天、小时、分钟和秒的值。顺序无关紧要,但不考虑重复(例如,只有第一个“d”出现会被处理,其他将被忽略)。
#!/usr/bin/perl
use strict;
my @markers = ('d', 'h', 'm', 's');
my @converter = (24*60*60*1000, 60*60*1000, 60*1000, 1000);
my $string = $ARGV[0];
my $total_ms = 0;
while(@markers)
{
my $cur_mark = shift(@markers);
my $cur_convert = shift(@converter);
if ($string =~ m/$cur_mark/)
{
my $pre = $`;
$pre =~ m/\b/;
$total_ms += $' * $cur_convert;
}
}
print("Total miliseconds = $total_ms\n");
使用示例:
./foo.pl "2m 2s"
Total miliseconds = 122000
./foo.pl "0.5h 0.5s"
Total miliseconds = 1800500