2017-08-06 55 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