2017-08-06 60 views
1

我正在尝试本周最后一个星期一的月份编号。我得到它来检查一周中的哪一天,如果它不是星期一,那么减去x天并将该新日期设置为变量值。在shell脚本中格式化日期变量

我遇到的麻烦是将此变量格式化为仅获取月份。一切正常,除了下面的第二行到最后一行。

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

回答

1

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

看来你在BSD变种date提供格式字符串:

这个工作对我来说:

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

'-v'在BSD,这是使用的MacOS/OS X使用.. –

+0

感谢:编辑。 –

0

使用expr将其转换为数字。

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

输出:

8