我正在学习shell脚本,但我无法解决这个错误,任何帮助都非常感激。
#!/bin/sh
LOCATION=/tmp/loc
PROXY=http://wwwproxy.unimelb.edu.au:8000
http_proxy=$PROXY; export http_proxy
echo "Installing into" $LOCATION
if [ ! -d $LOCATION ]; then mkdir $LOCATION; fi
if [ ! -d $LOCATION/packages ]; then mkdir $LOCATION/packages; fi
TOMCAT_FILE=apache-tomcat-6.0.24.tar.gz
if [ ! -e $LOCATION/packages/$TOMCAT_FILE ]; then
echo "Downloading" $TOMCAT_FILE
wget http://mirror.olnevhost.net/pub/apache/tomcat/tomcat-6/v6.0.24/bin/apache-tomcat-6.0.24.tar.gz -O $LOCATION/packages/$TOMCAT_FILE
else
echo "Found" $TOMCAT_FILE
fi
在第三个带有错误的if语句中似乎失败了:
bash-3.00$ ./install.sh
Installing into /tmp/loc
./install.sh: test: argument expected
(对于那些认为他们更了解如何做到这一点的人,不是因为外部要求,我真的不得不写一个脚本来处理这个问题)
答案 0 :(得分:2)
我认为你的/bin/sh
没有指向bourne-again shell,因为该脚本适用于其他人(请参阅对你问题的评论)。
对于bourne-again shell脚本,shebang应为/bin/bash
,但/bin/sh
可用于某些具有符号链接/bin/sh -> /bin/bash
的发行版(如Debian)。
答案 1 :(得分:2)
除非您的sh没有使用bash,否则您可以尝试将shebang更改为#!/bin/bash
答案 2 :(得分:2)
另一种写作方式
if [ ! -d $LOCATION ]; then mkdir $LOCATION; fi
是
[ -d $LOCATION ] || mkdir $LOCATION