检查参数的内容:错误:[:缺少‘]’&未找到命令

时间:2021-06-29 21:07:00

标签: linux bash if-statement

我正在尝试编写一个带有参数的脚本,并根据用户提供的参数初始化一个包含文件路径的变量;但是,我遇到了一些问题,因为我的 if else 语句似乎有问题,而且我的字符串不是作为字符串读取而是作为命令名称读取....

#!/bin/bash
PROJ_DIR='./'

if [ $1 == "All" | $1 == "all" | $1 == "ALL" ]
then
        OUT_FILEPATH_1=$PROJ_DIR/All/1
        OUT_FILEPATH_2=$PROJ_DIR/All/2
elif [ $1 == "Euro" || $1 == "euro" || $1 == "EURO" ]
then
        OUT_FILEPATH_1=$PROJ_DIR/Euro/1
        OUT_FILEPATH_2=$PROJ_DIR/Euro/2
else
        echo "Incorrect Choice"
        exit 1
fi

echo $OUT_FILEPATH_1
echo $OUT_FILEPATH_2

然后我运行:./testingifelse.sh "euro"

并且我收到 6 条错误消息并运行 else 命令:

./testingifelse.sh: line 3: [: missing `]'
./testingifelse.sh: line 3: all: command not found
./testingifelse.sh: line 3: ALL: command not found
./testingifelse.sh: line 7: [: missing `]'
./testingifelse.sh: line 7: euro: command not found
./testingifelse.sh: line 7: euro: command not found
Incorrect Choice

2 个答案:

答案 0 :(得分:3)

  1. bash 中的“或”条件是 || 而不是 |(后者是管道)。

  2. 您的 if 语句中的“或”条件格式不正确。 if 中的每个条件都必须包含在 [ ... ] 中,您可以将多个条件分开,例如 [ ... ] || [ ... ]

  3. 当引用变量时,您应该在这些条件内引用它们。这是为了安全起见(以防在这种情况下您不带参数调用程序)。

试试这个:

#!/bin/bash
PROJ_DIR='./'

if [ "$1" = "All" ] || [ "$1" = "all" ] || [ "$1" = "ALL" ]
then
        OUT_FILEPATH_1=$PROJ_DIR/All/1
        OUT_FILEPATH_2=$PROJ_DIR/All/2
elif [ "$1" = "Euro" ] || [ "$1" = "euro" ] || [ "$1" = "EURO" ]
then
        OUT_FILEPATH_1=$PROJ_DIR/Euro/1
        OUT_FILEPATH_2=$PROJ_DIR/Euro/2
else
        echo "Incorrect Choice"
        exit 1
fi

echo $OUT_FILEPATH_1
echo $OUT_FILEPATH_2

答案 1 :(得分:0)

比较字符串时,必须在 if else 语句中使用 [[ a == b ]]。 此外,OR 语句不是 | ,而是 ||。空格也很重要。

正确答案是:

#!/bin/bash
PROJ_DIR='./'

if [[ $1 == "All" || $1 == "all" || $1 == "ALL" ]]
then
        OUT_FILEPATH_1=$PROJ_DIR/All/1
        OUT_FILEPATH_2=$PROJ_DIR/All/2
elif [[ $1 == "Euro" || $1 == "euro" || $1 == "EURO" ]]
then
        OUT_FILEPATH_1=$PROJ_DIR/Euro/1
        OUT_FILEPATH_2=$PROJ_DIR/Euro/2
else
        echo "Incorrect Choice"
        exit 1
fi

echo $OUT_FILEPATH_1
echo $OUT_FILEPATH_2
相关问题