麻烦将参数传递给简单的ShellScript(找不到命令)

时间:2011-10-27 17:29:56

标签: macos bash shell unix scripting

我正在尝试编写一个简单的shell脚本,如果有的话打印出第一个参数,如果不存在,则打印“none”。该脚本名为test.sh

    if [$1 = ""]
    then
        echo "none"
    else
        echo $1
    fi

如果我在没有参数的情况下运行脚本,一切正常。但是,如果我运行此命令source test.sh -test,则在脚本继续并正确回声测试之前,我会收到此错误-bash: [test: command not found。我做错了什么?

1 个答案:

答案 0 :(得分:8)

在'[',']'字符之前/之后需要空格,即

if [ "$1" = "" ] ; then
#---^---------^ here
   echo "none"
else
    echo "$1"
fi

你需要用上面编辑的引号将你的引用(实际上所有引用)包装到$ 1。

修复后,您可能还需要提供脚本的相对路径,即

source ./test.sh -test
#------^^--- there

如果你收到shell错误消息,那么在导致你麻烦的行之前用set -vx开启shell调试几乎总是有帮助的,或者非常靠近你的脚本。然后你可以看到正在执行的每一行/代码块,以及shell正在使用的变量的值。

我希望这会有所帮助。