不带日期功能的bash中将数字日期转换为字母日期

时间:2018-10-29 15:30:03

标签: linux bash

我试图在不使用日期函数(传统BASH环境)的情况下,将BASH中的数字日期转换为字母日期。

我想做的是每个月都有一个case语句,根据输入的TestDate将其设置为变量(ConvDate),然后在OutputDate变量中将其返回。但是,当我对此进行测试时,它会在不添加字符串的情况下打印重新排列的日期:

示例:

10/25/18

从现在开始采样:

25//18

2 个答案:

答案 0 :(得分:3)

关于您的代码的一些想法:

  • 在case命令的分支中,当您需要将该字符串分配给变量时,您正尝试执行Jan命令
  • 您需要先在case命令之前分析日期字符串 ,因为您显然首先需要知道月份号。
  • 大括号不是引号:请谨慎对待变量的引号(即始终引号)–除非您实际从用户那里获得输入数据,否则这不会对您造成伤害。
  • 您正在此处将月份数字作为字符串处理。如果在脚本执行过程中开始将其作为一个数字来处理,请注意0809是无效的八进制数字,bash乐于通知您:

    $ m=08; echo $(($m+1))
    bash: 08: value too great for base (error token is "08")
    

修订

TestDate=09/25/18
IFS=/ read m d y <<INPUT
$TestDate
INPUT
case $m in
    01) Mon=Jan ;;
    02) Mon=Feb ;;
    03) Mon=Mar ;;
    04) Mon=Apr ;;
    05) Mon=May ;;
    06) Mon=Jun ;;
    07) Mon=Jul ;;
    08) Mon=Aug ;;
    09) Mon=Sep ;;
    10) Mon=Oct ;;
    11) Mon=Nov ;;
    12) Mon=Dec ;;
esac
OutputDate="$d/$Mon/$y"
echo "$OutputDate"

答案 1 :(得分:0)

您快到了。当您说case ${ConvDate} in时,表示“当${ConvDate}是...时”。您应该将${ConvDate}替换为您实际测试的内容(日期字符串的0到1或${TestDate:0:2}字符),然后在case语句中进行赋值:

ConvDate=Jan