Bash Shell提供默认日期

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 查询,以生成报告。

酷客网相关文章:

赞(0)

评论 抢沙发

评论前必须登录!