我正在寻找一个可以解析持续时间的bash
脚本。
如果给出三个参数,则表示小时,分钟和秒。如果给出两个参数,则它们表示分钟和秒,小时为零。
答案 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标准,还必须支持数组。