编写一个接受持续时间作为参数的bash脚本?

时间:2015-09-18 23:23:49

标签: linux bash time duration

我正在寻找一个可以解析持续时间的bash脚本。

如果给出三个参数,则表示小时,分钟和秒。如果给出两个参数,则它们表示分钟和秒,小时为零。

2 个答案:

答案 0 :(得分:4)

以下内容如何:

#!/bin/bash

h=0
if [ "$#" -ge 3 ]
then
   h=$1
   shift
fi
sec=$((3600*$h+60*$1+$2))

echo "The total number of seconds is $sec"

由于问题未指定您在给定时间内的目的,程序会计算总秒数。此外,如果至少给出两个参数,则检查是否有用。

该脚本使用shift操作,转移使得$1 := $2; $2 := $3等等。换句话说,第一个参数被处理,然后你"假装"它从未存在过。

默认情况下,您将h设置为零,并且仅当参数数量大于或等于3时,才会设置h

答案 1 :(得分:2)

这是针对该类任务的或多或少的通用解决方案。对不起,如果是猴子代码,但我认为这已经足够了:

gettime() {
    params=(
        years months weeks days hours minutes seconds
    )
    for i in `seq ${#params}`; do
        param_i=$((${#params} - i + 1)) # reversed params index
        [ $i -le $# ] && {
            eval "local ${params[$param_i]}=\$$(($# - i + 1))"
        } || {
            eval "local ${params[$param_i]}=0"
        }
        eval "echo ${params[$param_i]} '==' \$${params[$param_i]}" # debug output
    done
}

以下是示例输出:

$ gettime 3 4 5 6 7

seconds == 7
minutes == 6
hours == 5
days == 4
weeks == 3
months == 0
years == 0

请注意,您使用的shell不仅必须支持POSIX标准,还必须支持数组。