我想要一个 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。