【问题标题】:Shell Scripting pattern for date日期的 Shell 脚本模式
【发布时间】:2019-05-16 15:55:21
【问题描述】:

我正在尝试制作一个脚本,要求用户输入日期。这个日期应该这样输入:DDMMYYHHMM。例如,如果它是15-12-2018 13:05。应该这样写1512181305。我试图找到正确的模式来只接受这种格式。我在想这样的事情:

#!/bin/bash  
read date 
[[ $date =~ ^[[:digit:]]+$ ]]      || exit 1;

【问题讨论】:

  • 什么不起作用?
  • 这是一种有点幼稚的方法 - 它允许 19 月 45 日;)在第 32 小时的第 98 分钟 ...
  • 顺便说一句,就自然排序而言 YYYYMMDDHHMM 会更有意义 - 只是说。
  • 为什么不使用date -d"$user_input" 来验证用户以可接受的形式输入的日期,然后您可以根据需要在命令替换中使用日期格式化日期?

标签: linux shell terminal grep


【解决方案1】:

你可以使用类似的东西:

#!/bin/bash
read date
[[ $date =~ ^(0[1-9]|[1-2][0-9]|3[01])(0[1-9]|1[0-2])[0-9][0-9](2[0-3]|[01][0-9])[0-5][0-9]$ ]] || exit 1;

有了这个:

Day could be between 1 and 31 --> (0[1-9]|[1-2][0-9]|3[01])
Month between 1 and 12        --> (0[1-9]|1[0-2])
Year between 0 and 99         --> [0-9][0-9]
Hour between 0 and 23         --> (2[0-3]|[01][0-9])
Minutes between 0 and 59      --> [0-5][0-9]

【讨论】:

    猜你喜欢
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 2010-11-26
    • 2011-07-21
    • 2014-06-27
    • 1970-01-01
    • 2011-11-22
    • 1970-01-01
    相关资源
    最近更新 更多