0

我正在尝试执行以下 shell 脚本

#!/bin/sh
echo "start"
if [ $# != 2 || $1 != "first" || $1 != "second" ]
then
    echo "Error"
fi
echo "done"

我得到以下输出: start ./autobuild.sh: line 3: [: missing `]' ./autobuild.sh: line 3: !=: command not found ./autobuild.sh: line 3: ! =:命令未找到完成

我不知道如何解决这些错误。即使我使用-ne而不是!=,我也会得到相同的错误。请帮忙。

4

4 回答 4

2

你的语法不正确。如果要在 if 语句中使用多个条件,则需要有多个[]块。尝试:

if [ $# != 2 ] || [ $1 != "first" ] || [ $1 != "second" ]

但是,最好使用[[(如果您的外壳支持它),因为它使用起来更安全。我会去:

if [[ $# -ne 2 || $1 != "first" || $1 != "second" ]]

请参阅括号中的这个问题:在 bash 脚本中 [[ ]] 是否优于 [ ]?

于 2013-09-04T07:28:29.403 回答
1

虽然 OR ing 条件应分开如下:

#!/bin/sh
echo "start"
if [ $# != 2]  || [ $1 != "first" ] || [ $1 != "second" ]
then
    echo "Error"
fi
echo "done"
于 2013-09-04T07:31:02.667 回答
0

尝试替换-NE.!=

如果使用示例

于 2013-09-04T07:25:50.893 回答
0

这应该有效:

#!/bin/sh
echo "start"
if [ $# -ne 2 -o $1 -ne "first" -o $1 -ne "second" ]
then
    echo "Error"
fi
echo "done"
于 2013-09-04T07:29:19.987 回答