2010-10-21 257 views
6

我需要在變量中增加分鐘和秒(與時間相關)。在bash/shell腳本中增加時間(分鐘和秒)

首先,我不知道是否宣告「時間」變量被寫成

time="00:00:00" 

time=$(date +00:00:00)? 

從那裏,我想了10分鐘和秒來增加這個變量導致

01:00:00增加到
01:10:10到
01:20:20 etc(一直到午夜 - 00:00:00)

什麼是最好的方法爲了達成這個?

據我所知,做 $ date -d "2010-07-07 200 days"增加(200)天,但我不知道如何將這個例子應用到時間(分鐘和秒),而不是日期?

非常感謝所有的答覆。

+0

你應該澄清你的目標和約束,特別是如果這是一個家庭作業問題(如果是的話,它應該被標記爲這樣)。在循環中多次運行諸如'date'等外部可執行文件可能會非常緩慢,但可能會大大簡化代碼。如果你需要提高性能,你需要編寫一些更復雜的代碼,並進行增量,模數和攜帶。 Bash沒有「時間變量」的概念。如果你使用'date',你需要使用它理解的東西(可能是你的第一個例子)。否則,你將不得不使用Bash的字符串和整數。 – 2010-10-22 00:44:04

回答

5

請注意,這僅限於Linux。在BSD unixes(可能還有其他)上做了一些明顯不同的事情(和不幸的事情)。

你可以使用劃時代的時間 - 即秒自1970年1月1日00:00:00,例如:

#!/bin/bash 

time=0 
echo `date -d "1970-01-01 00:00:00 UTC $time seconds" +"%H:%M:%S"` 
time=$((time + 600)) 
echo `date -d "1970-01-01 00:00:00 UTC $time seconds" +"%H:%M:%S"` 
time=$((time + 600)) 
echo `date -d "1970-01-01 00:00:00 UTC $time seconds" +"%H:%M:%S"` 

給出了這樣的輸出:

$ /tmp/datetest.sh 
00:00:00 
00:10:00 
00:20:00 
$ 
+1

您可能需要將'-u'添加到date命令。 – 2010-10-22 00:37:35

+0

'+「%H:%M:%S」'相當於'%T' afair – 2014-03-12 09:48:24

+0

唉,'date'的'-d'選項與BSD unices和macOS中的意圖完全不同。這個解決方案是Linux專用的,即使問題不是。 – ghoti 2018-01-17 03:26:03

0

date命令不可bash的一部分。它由您的操作系統提供,其行爲在不同的操作系統中有所不同。值得注意的是,GNU coreutils日期(在大多數Linux發行版中)有一個-d選項用於解釋源日期,而BSD日期有一個-f選項用於解釋特定格式的輸入日期和一個-v選項用於調整各個單元的時間。

您已經爲Linux選項獲得了可接受的答案。要完成這一點,這裏有一個BSD(和MacOS)選項:這裏

$ for ((s=0; s<86400; s+=610)); do date -j -v+${s}S -f '%H:%M:%S' "$time" '+%T'; done | head -5 
00:00:00 
00:10:10 
00:20:20 
00:30:30 
00:40:40 

輸出顯然修整,以5日線。

當然,這仍然是平臺特定的。如果你想要的東西,會在bash 隨時隨地工作,那麼只要你使用bash> 4.2,下面可以做:

$ offset=$(printf '%(%z)T\n' 0) 
$ for ((s=$((${offset:1:2}*3600 + ${offset:3}*60)); s<86400; s+=610)); do printf '%(%T)T\n' "$s"; done | head -5 
00:00:00 
00:10:10 
00:20:20 
00:30:30 
00:40:40 

$offset變量允許我們來補償的事實,你可能不在UTC。 :)與date解決方案類似,此步驟的增量爲610秒,但它使用printf%T格式生成輸出。您可以在86400終點上添加或減去時區偏移量以獲得一整天的時間。處理這是留給讀者的一個練習。 :-)

相關問題