1

我正在学习 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

(对于那些认为自己更了解如何做到这一点的人,不,由于外部要求,我真的必须编写一个脚本来处理这个问题)

4

3 回答 3

2

我假设您/bin/sh没有指向 bourne-again shell,因为该脚本适用于其他人(请参阅对您问题的评论)。

shebang 应该/bin/bash用于 bourne-again shell 脚本,但/bin/sh可以在某些具有 symlink 的发行版(如 Debian)中使用/bin/sh -> /bin/bash

于 2010-02-04T07:06:16.840 回答
2

除非您的 sh 没有别名为 bash,否则您可以尝试将 shebang 更改为#!/bin/bash

于 2010-02-04T07:07:05.880 回答
2

另一种写法

if [ ! -d $LOCATION ]; then mkdir $LOCATION; fi

[ -d $LOCATION ] || mkdir $LOCATION
于 2010-02-04T14:47:55.630 回答