【问题标题】:Format date variable in shell script在 shell 脚本中格式化日期变量
【发布时间】:2017-08-06 03:56:07
【问题描述】:

我正在尝试本周最后一个星期一的月份数。我得到它来检查它是星期几,如果不是星期一,则减去 x 天并将新日期设置为变量值。

我遇到的问题是将这个变量格式化为只获取月份。除了下面的倒数第二行之外,一切正常。

startDate=$(date)
weekDayNum=$(date +'%u') # 1 is Monday

# If today is NOT Monday
if [ weekDayNum > 1 ];
then
    # Get the date for the last Monday
    newWeekDayNum=$(($weekDayNum-1))

    startDate=$(date -j -v-${newWeekDayNum}d)
fi

month=$(date -d "$startDate" +'%m')
echo $month```

【问题讨论】:

    标签: bash macos shell unix bsd


    【解决方案1】:

    [ weekDayNum > 1 ] 不测试数字顺序。使用 [ $weekDayNum -gt 10 ](您也没有访问 weekDayNum 变量的值)。

    看来您必须在dateBSD 变体中提供格式字符串:

    这对我有用:

    #!/usr/bin/env bash                                                                                                                                                                                                
    
    LANG=C                                                                                                                                                                                                             
    startDate=$(date)                                                                                                                                                                                                  
    weekDayNum=$(date +'%u') # 1 is Monday                                                                                                                                                                             
    
    # If today is NOT Monday                                                                                                                                                                                           
    if [ $weekDayNum -gt 1 ];                                                                                                                                                                                          
    then                                                                                                                                                                                                               
        startDate=$(date -j -v "-$(($weekDayNum - 1))d")                                                                                                                                                               
    fi                                                                                                                                                                                                                 
    
    month=$(date -j  -f "%a %b %d %T %Z %Y"  "${startDate}" +'%m')                                                                                                                                                     
    echo $month    
    

    【讨论】:

      【解决方案2】:

      使用expr 将其转换为数字。

      month=$(date -d "$startDate" +'%m')
      month=$(expr $month + 0)
      echo $month
      

      输出:

      8
      

      【讨论】:

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