在 Bash 中将秒添加到当前时间

YEE*_*EEN 1 bash time date

我想加 10 秒 10 次。但我不太清楚如何为价值增加时间。

这是我的代码。

./time.sh

time=$(date)
counter=1
while [ $counter -le 10 ] 
do
    echo "$time"
    time=$('$time + 10 seconds') //error occurred.
    ((counter++))
done

echo All done
Run Code Online (Sandbox Code Playgroud)

Joh*_*024 6

使用 GNU 日期

假设 GNU date,替换:

time=$('$time + 10 seconds')
Run Code Online (Sandbox Code Playgroud)

和:

time=$(date -d "$time + 10 seconds")
Run Code Online (Sandbox Code Playgroud)

把它们放在一起,尝试:

$ cat a.sh
t=$(date)
counter=1
while [ "$counter" -le 10 ]
do
    echo "$t"
    t=$(date -d "$t + 10 seconds")
    ((counter++))
done

echo All done
Run Code Online (Sandbox Code Playgroud)

(我重命名time为t因为time也是 bash 内置命令,最好避免潜在的混淆。)

运行时,输出如下所示:

$ bash a.sh
Tue Jan 16 19:19:44 PST 2018
Tue Jan 16 19:19:54 PST 2018
Tue Jan 16 19:20:04 PST 2018
Tue Jan 16 19:20:14 PST 2018
Tue Jan 16 19:20:24 PST 2018
Tue Jan 16 19:20:34 PST 2018
Tue Jan 16 19:20:44 PST 2018
Tue Jan 16 19:20:54 PST 2018
Tue Jan 16 19:21:04 PST 2018
Tue Jan 16 19:21:14 PST 2018
All done
Run Code Online (Sandbox Code Playgroud)

使用 Bash (>4.2)

最新版本的 bash 支持无需外部实用程序的日期计算。尝试:

$ cat b.sh
#!/bin/bash
printf -v t '%(%s)T' -1
counter=1
while [ "$counter" -le 10 ]
do
    ((t=t+10))
    printf '%(%c)T\n' "$t"
    ((counter++))
done

echo All done
Run Code Online (Sandbox Code Playgroud)

这里t是自纪元以来的时间(以秒为单位)。

运行时,输出如下所示:

$ bash b.sh
Tue 16 Jan 2018 07:31:44 PM PST
Tue 16 Jan 2018 07:31:54 PM PST
Tue 16 Jan 2018 07:32:04 PM PST
Tue 16 Jan 2018 07:32:14 PM PST
Tue 16 Jan 2018 07:32:24 PM PST
Tue 16 Jan 2018 07:32:34 PM PST
Tue 16 Jan 2018 07:32:44 PM PST
Tue 16 Jan 2018 07:32:54 PM PST
Tue 16 Jan 2018 07:33:04 PM PST
Tue 16 Jan 2018 07:33:14 PM PST
All done
Run Code Online (Sandbox Code Playgroud)