我正在尝试编写一个带有参数的脚本,并根据用户提供的参数初始化一个包含文件路径的变量;但是,我遇到了一些问题,因为我的 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
答案 0 :(得分:3)
bash 中的“或”条件是 ||
而不是 |
(后者是管道)。
您的 if 语句中的“或”条件格式不正确。 if
中的每个条件都必须包含在 [ ... ]
中,您可以将多个条件分开,例如 [ ... ] || [ ... ]
。
当引用变量时,您应该在这些条件内引用它们。这是为了安全起见(以防在这种情况下您不带参数调用程序)。
试试这个:
#!/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