2011-03-01 55 views

回答

78

像其他人所說的那樣,使用time命令是一個好主意。

另一種選擇是使用神奇的內置變量$ SECONDS,它包含腳本開始執行以來的秒數。你可以說:

START_TIME=$SECONDS 
dosomething 
ELAPSED_TIME=$(($SECONDS - $START_TIME)) 

我認爲這是bash特有的,但既然你在Linux上,我假設你使用bash。

33

使用time命令。 time ls /bin

+0

當您執行**複雜的命令序列時,「時間」不適用** ** – 2013-12-26 07:06:41

+4

@ shiplu.mokadd.im否?怎麼樣:'時間(ls /; sleep 2; ls/bin)'。 – Keith 2013-12-26 09:06:08

+0

如果使用'\'和'()',它變得更加複雜。 – 2013-12-26 15:21:24

25

嘗試下面的例子:

START_TIME=$SECONDS 
# do something 
sleep 65 

ELAPSED_TIME=$(($SECONDS - $START_TIME)) 

echo "$(($ELAPSED_TIME/60)) min $(($ELAPSED_TIME%60)) sec"  
#> 1 min 5 sec 
2

只是爲了幫助別人像我這樣收到一個錯誤:

arithmetic expression: expecting primary: "-" 

檢查你的shell是應先從:

#!/bin/bash 

乾杯!

3

以下是查找經過的時間(以毫秒爲單位)的腳本。將睡眠60行替換爲您要執行的代碼。

a=0 
while [ $a -lt 10 ] 
do 
START_TIME=`echo $(($(date +%s%N)/1000000))` 
sleep 3 
END_TIME=`echo $(($(date +%s%N)/1000000))` 
ELAPSED_TIME=$(($END_TIME - $START_TIME)) 
echo $ELAPSED_TIME 
if [ $a -eq 10 ] 
then 
    break 
fi 
a=`expr $a + 1` 
done 
+0

毫秒級的合理解決方案。 – Blaf 2018-02-08 11:15:47