我正在试图弄清楚如何在我自己的一个脚本中的shutdown
命令see manpage中实现“智能”时间解析。
那么我怎样才能在bash脚本中进行这些转换呢?
now -> 1448537350
+30 -> 1448539150
+1h -> 1448540950
+1d -> 1448623750
00:00 -> 1448582400
我目前的解决方案不是很好,只支持+/-XX
格式,但并不真正解析传入的参数,而只是使用参数进行数学运算:
#!/bin/bash
TIME=$(date "+%s")
let TIME=$TIME$1
echo $TIME
这样称呼
./script.sh +3600 #in 1 hour
那么有什么我可以重复使用人类可读时间范围作为参数吗?
干杯
答案 0 :(得分:4)
像这样:
date -d 'now' +%s
date -d '+30min' +%s
date -d '+1hour' +%s
date -d '00:00' +%s
我希望有所帮助。如需进一步阅读,我建议man date
。
答案 1 :(得分:1)
如果可以使用外部工具,您可以尝试使用dateutil工具。
以下是一个例子:
DATEADD
在shell中执行日期算术(日期数学)的工具。给定日期和持续时间列表,这将计算新日期。给定持续时间和日期列表,这将计算新的日期。
$ dateadd 2010-02-02 +4d
=>
2010-02-06
$ dateadd 2010-02-02 +1w
=>
2010-02-09
$ dateadd -1d <<EOF 2001-01-05 2001-01-01 EOF
=&GT;
2001-01-04 2000-12-31
将持续时间添加到时间:
$ dateadd 12:05:00 +10m
=&GT;
12:15:00
甚至是日期时间:
$ dateadd 2012-03-12T12:05:00 -1d4h
=&GT;
2012-03-11T08:05:00
答案 2 :(得分:0)
您可以使用date
命令检查参数是否是人类可读的。如果没有,那么您可以使用正则表达式检查它是否为数字。一个例子是这样的:
#!/bin/bash
TIME=$(date "+%s")
if date -d "$1" "+%s" > /dev/null 2>&1; then ## Human Readable Format
d=$(date -d "$1" "+%s")
let TIME=$TIME+$d
echo $TIME
elif [[ $1 =~ ^[+-]+{1}[0-9]+$ ]]; then ## Numerical Value
let TIME=$TIME$1
echo $TIME
else
echo "Parsing Error!"
fi