Bash 目录创建的脚本条件语句 - 找不到命令错误

Bash Script conditional statement for directory creation - command not found error

#!/bin/bash

dd=`date +%d`
mm=`date +%m`
yy=`date +%Y`
TODAY=`date +%d`
MONTH=`date +%m`
TOMORROW=`date +%d --date="1 days"`

echo $TODAY
echo $MONTH
#echo $TOMORROW


#if [ $TOMORROW < $TODAY ]; then
#   exit 0
#fi

cd /Users/name/monthly

if [$TODAY == 01 && $MONTH == 01];
then
    mkdir -p January
elif [$TODAY == 01 && $MONTH == 02];
then
    mkdir -p February
elif [$TODAY == 01 && $MONTH == 03];
then
    mkdir -p March
elif [$TODAY == 01 && $MONTH == 04];
then
    mkdir -p April
elif [$TODAY == 01 && $MONTH == 05];
then
    mkdir -p May
elif [$TODAY == 01 && $MONTH == 06];
then
   mkdir -p June
elif [$TODAY == 01 && $MONTH == 07];
then
    mkdir -p July
elif [$TODAY == 01 && $MONTH == 08];
then
    mkdir -p August
elif [$TODAY == 01 && $MONTH == 09];
then
    mkdir -p September
elif [$TODAY == 01 && $MONTH == 10];
then
    mkdir -p October
elif [$TODAY == 25 && $MONTH == 11];
then
    mkdir -p November
elif [$TODAY == 01 && $MONTH == 12];
then
    mkdir -p December
fi

我正在尝试为使用 shell 脚本的每个月创建目录。 出于测试目的,我使用 11 月的日期 25,但条件语句将检查日期是否为 01 且月份是否为 01..12,然后它将相应地创建文件夹。

打印了今天和月份,但是对于条件语句,我得到命令未找到错误。

test.sh:第 21 行:未找到命令 .....

如果您不只是查看 command not found,而是查看 bash 在 之前打印的内容,您会立即发现错误 那:它输出未找到的命令。

bash 中的条件语句的形式为

if COMMAND
then 
   ....

在你的例子中,COMMAND 类似于

[$TODAY == 01 && $MONTH == 02]

实际上是两个命令,由&&连接。假设 TODAY 包含字符串 05。在这种情况下,您将拥有命令

[05 == 01

表示:调用存储在文件[05中的程序,参数为==01。由于您的 PATH 中可能没有这个奇怪名称的文件,您会得到 command not found.

有几种方法可以解决这个问题,但在我看来,最可读的是

if [[ $TODAY == 01 && $MONTH == 05 ]]

在这种情况下,我们将 [[ 作为命令(而不是 [05),因为这是 bash 的句法元素而不是外部命令,所以它不会由 && 终止,但一直延伸到结束 ]].