如何在shell脚本中获取存储在两个变量中的时差

如何在shell脚本中获取存储在两个变量中的时差,shell,time,Shell,Time,脚本如下: 我想从$starttime中减去$endtime,然后显示时差 但每当我运行它 它显示了这个错误 “expr:非数值参数” 看起来您必须测量shell脚本(或部分脚本)的运行时间。在这种情况下,我将以这种方式使用内部变量SECONDS: SECONDS=0 ... your stuff here... echo "Elapsed: ${SECONDS}" # and/or... if you (also) want HH:MM:SS hh=$(( SECONDS / 3600 )

脚本如下:



我想从
$starttime
中减去
$endtime
,然后显示时差

但每当我运行它

它显示了这个错误

“expr:非数值参数”


看起来您必须测量shell脚本(或部分脚本)的运行时间。在这种情况下,我将以这种方式使用内部变量SECONDS:

SECONDS=0
... your stuff here...
echo "Elapsed: ${SECONDS}"
# and/or... if you (also) want HH:MM:SS
hh=$(( SECONDS / 3600 ))
mm=$(( ( SECONDS / 60 ) % 60 ))
ss=$(( SECONDS % 60 ))
printf "Elapsed: %02d:%02d:%02d\n", $hh $mm $ss  

看起来您必须测量shell脚本(或部分脚本)的运行时间。在这种情况下,我将以这种方式使用内部变量SECONDS:

SECONDS=0
... your stuff here...
echo "Elapsed: ${SECONDS}"
# and/or... if you (also) want HH:MM:SS
hh=$(( SECONDS / 3600 ))
mm=$(( ( SECONDS / 60 ) % 60 ))
ss=$(( SECONDS % 60 ))
printf "Elapsed: %02d:%02d:%02d\n", $hh $mm $ss  

继续评论。如果您已使用
$(日期+%s)
保存
开始时间
结束时间
,并获取差异
结束时间-开始时间
(存储在
tmdiff
中),则现在的差异以秒为单位。您的开始时间很简单:

date -d @${starttime_s}
(您可以使用
echo$(date-d@${starttime\u s})
输出它,并在末尾添加您选择的任何格式。例如
echo$(date-d@${starttime\u s}+%yourfmt)

您的结束时间是:

endtime=$((starttime_s + tmdiff))
date -d @${endtime}
(或只是)


您只是在使用
date-d
命令,该命令将给定的时间作为
date
命令的输入。

从注释继续。如果您已使用
$(日期+%s)
保存
开始时间
结束时间
,并获取差异
结束时间-开始时间
(存储在
tmdiff
中),则现在的差异以秒为单位。您的开始时间很简单:

date -d @${starttime_s}
(您可以使用
echo$(date-d@${starttime\u s})
输出它,并在末尾添加您选择的任何格式。例如
echo$(date-d@${starttime\u s}+%yourfmt)

您的结束时间是:

endtime=$((starttime_s + tmdiff))
date -d @${endtime}
(或只是)


您只是在使用
date-d
命令,该命令将给定的时间作为
date
命令的输入。

00:00:00不是数字参数。使用
%s
参数来表示数字表示的时间(以秒为单位)。使用
$(日期+%s)
存储
开始时间
结束时间
,以存储从纪元开始的秒数。然后,您可以简单地
endtime\u s-starttime\u s
并将秒转换为您喜欢的格式。使用
%T
仅保存时间信息会丢失所有日期引用,因此无法使用
日期-d
返回。如果您保证您的时间间隔仅为分钟/小时,您可以手动将其转换为秒。@DavidC.Rankin其工作正常,但我如何识别其开始时间和结束时间。。。因为它显示了类似“1455701713 1455701715 2”的内容,所以答案是正确的,但想知道它在什么时候开始,什么时候结束00:00:00不是一个数字参数。使用
%s
参数来表示数字表示的时间(以秒为单位)。使用
$(日期+%s)
存储
开始时间
结束时间
,以存储从纪元开始的秒数。然后,您可以简单地
endtime\u s-starttime\u s
并将秒转换为您喜欢的格式。使用
%T
仅保存时间信息会丢失所有日期引用,因此无法使用
日期-d
返回。如果您保证您的时间间隔仅为分钟/小时,您可以手动将其转换为秒。@DavidC.Rankin其工作正常,但我如何识别其开始时间和结束时间。。。因为它显示了类似“1455701713 1455701715 2”的内容,所以答案是正确的,但想知道它在什么时候开始,什么时候结束