我正在尝试本周最后一个星期一的月份数。我得到它来检查一周中的哪一天,如果它不是星期一,则减去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```
答案 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