执行shell脚本时出错

时间:2013-09-04 07:19:26

标签: shell

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

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

我得到以下输出:     开始     ./autobuild.sh:line 3:[:缺少`]'     ./autobuild.sh:line 3:!=:找不到命令     ./autobuild.sh:line 3:!=:找不到命令     完成

我不知道如何解决错误。即使我使用-ne代替!=,我也会遇到相同的错误。请帮忙。

4 个答案:

答案 0 :(得分:2)

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

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

但是,最好使用[[(如果你的shell支持它),因为它更安全。我会去:

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

在括号上查看此问题:Is [[ ]] preferable over [ ] in bash scripts?

答案 1 :(得分:1)

虽然条件中的OR应分开如下:

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

答案 2 :(得分:0)

尝试将-NE替换为!=

if-usage samples

答案 3 :(得分:0)

这应该有效:

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