2010-02-04 3 views
1

Я изучаю скрипты оболочки, но я не могу решить эту ошибку, любая помощь очень ценится.Почему это утверждение if не работает в оболочке bourne?

#!/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 

Оказывается, терпят неудачу на третьем, если заявление с сообщением об ошибке:

bash-3.00$ ./install.sh 
Installing into /tmp/loc 
./install.sh: test: argument expected 

(А для тех, кто считает, что лучше, как сделать это знает, нет, я действительно должен написать сценарий, чтобы позаботиться об этом из-за внешних требований)

+2

Это точный сценарий? Работает для меня после удаления задания http_proxy, что не имеет значения. –

+1

Работает и для меня (обе части финального 'if/else' выполняются правильно). –

+0

Как не связанное примечание, вам не нужно сначала «если», просто измените второе на 'mkdir -p $ LOCATION/packages' – Kimvais

ответ

2

Я предполагаю, что ваш /bin/sh не указывает на оболочку bourne-again, поскольку сценарий работает для других людей (см. комментарии к вашему вопросу).

притон должен быть /bin/bash для Bourne-Again Shell скриптов, но /bin/sh будет работать в некоторых дистрибутивах (например Debian), которые имеют символическую /bin/sh -> /bin/bash.

+0

Я пытался не использовать bash, но это объясняет, что происходит! (: Благодаря! – corydoras

2

если ваш ш не не псевдонимами Баш, вы можете попытаться изменить хижину к #!/bin/bash

2

Другой способ написать

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

является

[ -d $LOCATION ] || mkdir $LOCATION 
Смежные вопросы