shell获取指定日期上个月日期的月份
时间: 2023-10-02 11:07:38 浏览: 84
可以使用date命令结合shell变量和算术运算符来实现。
假设要获取2019年11月10日上个月的日期月份:
```
#!/bin/bash
# 获取当前日期
now=$(date +%Y%m%d)
# 获取上个月的日期
last_month=$(date -d "${now} -1 month" +%Y%m%d)
# 获取上个月的月份
last_month_num=$(date -d "${last_month}" +%m)
echo ${last_month_num}
```
输出结果为:10月对应的数字为10。
解释一下上面的代码:
1. 第二行获取当前日期,%Y%m%d表示年月日格式,例如20191110。
2. 第五行使用date命令获取上个月的日期,其中-d参数表示指定日期,-1 month表示上个月,+%Y%m%d表示年月日格式。
3. 第八行再次使用date命令获取上个月的月份,+%m表示月份格式,例如10月对应的数字为10。
这样就可以通过shell脚本获取指定日期上个月的月份了。
相关问题
shell获取上个月日期
可以使用date和Linux命令行的一些技巧来获取上个月的日期。以下是一个示例命令:
```
date -d "$(date +%Y-%m-15) -1 month" +%Y-%m-%d
```
这个命令的作用是:
1. `$(date +%Y-%m-15)` 返回当月15号的日期。
2. `-d` 选项告诉date命令将日期解释为字符串。
3. `-1 month` 表示向前一个月。
4. `+%Y-%m-%d` 选项表示输出日期的格式为YYYY-MM-DD。
该命令将输出上一个月15号的日期。如果你想获取上一个月的第一天或最后一天的日期,也可以使用类似的命令。
linux shell 指定月份,循环显示日期
可以使用 `cal` 命令结合循环来实现。
下面是一个例子,指定月份为7月,循环输出该月所有日期:
```
for day in $(cal 07 2021 | awk 'NF {for (i=2;i<=NF;i++) printf "%s ",$i}'); do
echo $day
done
```
解释一下:
- `cal 07 2021` 输出 2021 年 7 月的日历
- `awk 'NF {for (i=2;i<=NF;i++) printf "%s ",$i}'` 过滤掉输出中的非日期部分,只输出日期,例如:`1 2 3 4 ... 31`
- `for day in $(...)` 循环遍历日期,每次循环将日期保存在变量 `$day` 中
- `echo $day` 输出日期
你也可以根据需要修改月份和年份。