2017-08-06 19 views
1

今週の最後の月曜日の月の番号にしようとしています。月曜日でない場合は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``` 

答えて

1

[ weekDayNum > 1 ]は数値の順序のためにテストするものではありません。 [ $weekDayNum -gt 10 ]を使用してください(weekDayNum変数にもアクセスしていません)。

あなたがdateBSDバリアントに書式文字列を指定する必要がありそうです:

これは私の作品:

何MacOSのあるBSD、で使用されている-V`
#!/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

'/OS Xは.. –

+0

ありがとう:編集されました。 –

0

exprを使用して番号に変換します。

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

出力:

8 
関連する問題