如何查看某月有多少天?

如何查看某月有多少天?

我想要一个 bash 脚本来检查今天是否是本月的15号?

if [ $dayOfMonth == 15 ]
then
  echo "15th day of month
fi

答案1

该命令可以通过该命令获取该月的日期date +%d,该date命令使用格式字符串调用该命令%d。该格式字符串可能在date手册中描述,但肯定在 C 函数手册中描述strftime()。它以两位数(可能是零填充)的形式给出月份中的日期。

您可以在测试中使用它:

day=$( date +%d )

if [ "$day" = "15" ]; then
   echo 'the 15th'
fi

请注意此处使用的引用,并且字符串之间的相等性测试是通过单个=in[ ... ]测试完成的。

在 shell (4.2+) 的最新版本中bash,我认为您实际上正在使用它,您还可以使用以下命令获取该月的日期

printf -v day '%(%d)T' -1

这会将变量设置day为当前月份的某一天,而不依赖于外部date命令。表示-1当前日期和时间,参见手册中的描述

答案2

$ date --help
Usage: date [OPTION]... [+FORMAT]
  %d   day of month (e.g., 01)

因此,使用字符串相等(对于最多 9 的数字需要前导零,例如= "09"):

if [ "$(date +%d)" = "15" ]; then …

或者使用数字相等(不需要前导零,您可以编写eg -eq 9):

if [ "$(date +%d)" -eq 9 ]; then …

请注意,在 bash 中,[[ $(date +%d) -eq 9 ]]不起作用,因为当您-eq在双括号而不是单括号中使用时,它会将前导零视为指示数字为八进制。同样,如果您使用算术表达式,所有 shell 都会将前导零视为表示八进制数,因此类似的操作(($(date +%d) == 9))不起作用。 ((($(date +%d) == 15))可以工作,但会在该月的 8 号和 9 号显示错误消息。)dayOfMonth=$(date +%d); dayOfMonth=${dayOfMonth#0}; ((d == 9))可以工作,因为在该月的某一天的情况下,只有一个前导 0。

相关内容