在shell脚本中格式化日期变量

时间:2017-08-06 03:56:07

标签: bash macos shell unix bsd

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

我遇到的问题是将此变量格式化为仅获取月份。除了下面的第2行到最后一行,一切都有效。

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```

2 个答案:

答案 0 :(得分:1)

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

您似乎必须在date BSD 变体中提供格式字符串:

这对我有用:

#!/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    

答案 1 :(得分:0)

使用expr将其转换为数字。

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

输出:

8