2016-06-18 18 views
0

私は以下の2つの変数があるとします。分と秒で -日時をbashの現在の日付と時刻から差し引く

!#/bin/bash 
MEMFILE=lock-file 
date +%s > $MEMFILE 
sleep 130 
UPTIME= `date +%s` 

私は($ MEMFILE $稼働時間)の出力を取りたいです。

例:

"Total downtime was 2 minutes and 5 seconds" 
+0

これらはすべて1行になりました。ごめんなさい。私はそれがこのフォーラムでどのように正しくコード化されるかを知りませんでした。私は新しいですから。 – kkrrss

+0

行の4つの先頭スペースでコードをインデントする必要があります。また、http://stackoverflow.com/help/mcveをご覧ください –

+0

http://stackoverflow.com/questions/8903239/how-to-calculate-time-difference-in-bash-scriptこれを見ましたか? –

答えて

0

いくつかの可能性:


減算回dateから得られる:

#!/bin/bash 

startdate=$(date +%s) 
sleep 130 
enddate=$(date +%s) 
timetaken=$((enddate-startdate)) 
printf 'Total downtime was %d minutes and %d seconds\n' "$((timetaken/60))" "$((timetaken%60))" 

外部プロセスdateない同じ(バッシュ4.2以降):

#!/bin/bash 

printf -v startdate '%(%s)T' -1 
sleep 130 
printf -v enddate '%(%s)T' -1 
timetaken=$((enddate-startdate)) 
printf 'Total downtime was %d minutes and %d seconds\n' "$((timetaken/60))" "$((timetaken%60))" 

時間の減算と分と秒の計算は、arithmetic expansionを使用して行われます。

Bash's SECONDS variable(あなたのためにおそらく最高)使用

:特殊変数SECONDSが秒ごとにインクリメントされる整数値に設定された後

#!/bin/bash 

SECONDS=0 # reset the SECONDS variable 
sleep 130 
timetaken=$SECONDS 
printf 'Total downtime was %d minutes and %d seconds\n' "$((timetaken/60))" "$((timetaken%60))" 

を。適切なTIMEFORMAT

バッシュの timeキーワードを使用して

(ここでは、我々はMMの分SS秒として経過時間を書き込むことができません。それはMmSsの形で示されます、すなわち、合計ダウンタイムは2分10秒でした。 linked answerは、すでに材料の多くが含まれていることを

#!/bin/bash 

TIMEFORMAT='Total downtime was %0lR' 

time { 
    # do your stuff in this block 
    sleep 130 
} 

注意。

関連する問題