【问题标题】:validate date time format entered by user in shell script验证用户在 shell 脚本中输入的日期时间格式
【发布时间】:2017-03-04 09:36:17
【问题描述】:

我写了一个shell来输入日期和时间。

if date `+%d-%b-%y` -d $1 >> /dev/null 2>&1; then
  echo "Date Provided by user : $1"
else
  echo "Wrong date format please refer ReadMe for correct format"
  echo "You have eneterd : $1"
  exit 1
fi

if date `+%H:%M` -d $2 >> /dev/null 2>&1; then
  echo "Time Provided by user : $2"
else
  echo "Wrong Time format please refer ReadMe for correct format"
  echo "You have eneterd : $2"
  exit 1
fi

按预期工作正常,但问题是它在 nohup.out 下方打印

./ntwk_resource_rollback.sh[31]: +%d-%b-%y: not found [No such file or directory]
Date Provided by user : 07-feb-17
./ntwk_resource_rollback.sh[39]: +%H:%M: not found [No such file or directory]
Time Provided by user : 03:36    

所以我想删除它显示的从 nohup.out 中找不到目录的错误,因为客户端可以读取这个 nohup.out 以进行调试。

我可以为这个脚本使用 KSH 或 BASH。

请告知我在这里做错了什么!

【问题讨论】:

  • 我建议用'替换所有反引号。
  • 想知道即使没有nohup,它如何按预期正常工作。解释:见@Cyrus 的评论。
  • 当我说它工作正常时,如果我输入错误,它会给我错误消息,但问题是它没有给我没有找到目录的错误,这不利于在屏幕上显示或有人可能会采取错误的方式
  • @Cyrus:谢谢 cyrus,它有效。但是你能不能给我一些解释我做错了什么!我想将您的评论标记为正确答案

标签: linux bash shell unix sh


【解决方案1】:

当您使用反引号时,例如在+%d-%b-%y 中,shell 会尝试执行一个名为+%d-%b-%y 的程序,然后将其作为参数传递给date。当然它失败了,因为没有这样的程序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-09-15
    • 2018-06-11
    • 2021-09-06
    • 2011-11-07
    • 1970-01-01
    • 2022-12-02
    • 2012-10-28
    • 1970-01-01
    相关资源
    最近更新 更多