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

我正在寻找一个可以parsing一段时间的bash脚本。

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

那下面呢?

 #!/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

对于这种类型的任务,这是一个或多或少的一般解决方案。 对不起,如果是猴子码,但我觉得这足够了:

 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 

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

第一个参数:$ 1

第二个参数:$ 2

第三个参数:$ 3

等等…

例:

 bash-2.05a$ ./parseDuration.sh 13 25 25 13 hours and 25 minutes and 25 seconds bash-2.05a$ cat ./parseDuration.sh #!/bin/bash echo "$1 hours and $2 minutes and $3 seconds"