Bash Shell提供默认日期,你希望脚本能够提供一个有用的默认日期,最好还能提示用户核对。
解决方案
使用 GNU date 命令,将最有可能的日期分配给变量,然后允许用户更改。
#!/usr/bin/env bash
# 实例文件:default_date
# 使用中午时间来避免脚本在午夜前后运行,如果哪个表慢了几秒,就会出现“差了一天”的错误
START_DATE=$(date -d 'last week Monday 12:00:00' '+%Y-%m-%d')
while [ 1 ]; do
printf "%b" "The starting date is $START_DATE, is that correct? (Y/new date)"
read answer
# 除了直接按回车、输入"Y"或"y"之外,其他内容均作为新日期来验证
# 可以使用"[Yy]*"来允许用户输入"yes"……
# 按照CCYY-MM-DD的格式验证新日期
case "$answer" in
[Yy]) break
;;
[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9])
printf "%b" "Overriding $START_DATE with $answer\n"
START_DATE="$answer"
;;
*) printf "%b" "Invalid date, please try again...\n"
;;
esac
done
END_DATE=$(date -d "$START_DATE +7 days" '+%Y-%m-%d')
echo "START_DATE: $START_DATE"
echo "END_DATE: $END_DATE"
如果是中午的话,差几秒还是同一天;要是在午夜时分差几秒,日期就要隔天了。
讨论
并非所有的 date 命令都支持 -d
选项,但 GNU 版本支持。我们的建议是尽一切可能获得并使用 GNU date 命令。
如果脚本是以无人值守形式或定时(如通过 cron)运行,可以省略用户验证代码。
有关如何格式化日期和时间,参见格式化日期显示。
我们在脚本中使用类似的代码生成 SQL 查询。脚本在指定时间运行,针对特定日期范围创建 SQL 查询,以生成报告。
酷客网相关文章:
评论前必须登录!
注册