【问题标题】:Trouble Passing Parameter into Simple ShellScript (command not found)将参数传递到简单的 ShellScript 时遇到问题(找不到命令)
【发布时间】:2011-12-16 17:20:10
【问题描述】:

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

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

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

【问题讨论】:

    标签: macos bash shell unix scripting


    【解决方案1】:

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

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

    您需要将您的引用(实际上是所有引用)用上面编辑的引号括起来。

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

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

    当您在此处收到 shell 错误消息时,几乎总是在导致问题的行之前使用 set -vx 打开 shell 调试,或者非常靠近脚本顶部。然后您可以看到正在执行的每一行/代码块,以及 shell 正在使用的变量的值。

    我希望这会有所帮助。

    【讨论】:

    • 在结束]之前也需要一个空格
    • 使用这个脚本我得到 -bash: [: =: unary operator expected
    • 是的,请参阅在线编辑,在您的第一个 $1 周围添加 dbl-quotes。祝你好运。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-07
    • 2012-12-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多