我正在尝试编写一个简单的shell脚本,如果有的话打印出第一个参数,如果不存在,则打印“none”。该脚本名为test.sh
if [$1 = ""]
then
echo "none"
else
echo $1
fi
如果我在没有参数的情况下运行脚本,一切正常。但是,如果我运行此命令source test.sh -test
,则在脚本继续并正确回声测试之前,我会收到此错误-bash: [test: command not found
。我做错了什么?
答案 0 :(得分:8)
在'[',']'字符之前/之后需要空格,即
if [ "$1" = "" ] ; then
#---^---------^ here
echo "none"
else
echo "$1"
fi
你需要用上面编辑的引号将你的引用(实际上所有引用)包装到$ 1。
修复后,您可能还需要提供脚本的相对路径,即
source ./test.sh -test
#------^^--- there
如果你收到shell错误消息,那么在导致你麻烦的行之前用set -vx
开启shell调试几乎总是有帮助的,或者非常靠近你的脚本。然后你可以看到正在执行的每一行/代码块,以及shell正在使用的变量的值。
我希望这会有所帮助。