首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么这个if语句在bourne shell中失败?

为什么这个if语句在bourne shell中失败?
EN

Stack Overflow用户
提问于 2010-02-04 14:50:45
回答 3查看 652关注 0票数 1

我正在学习shell脚本,但我不能解决这个错误,任何帮助非常感谢。

代码语言:javascript
复制
#!/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语句中,它似乎失败了,并显示以下错误:

代码语言:javascript
复制
bash-3.00$ ./install.sh 
Installing into /tmp/loc
./install.sh: test: argument expected

(对于那些认为他们更了解如何做到这一点的人来说,由于外部需求,我真的不得不写一个脚本来处理这个问题)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-02-04 15:06:17

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

对于bourne-a shell脚本,shebang应该是/bin/bash,但是/bin/sh可以在一些具有符号链接/bin/sh -> /bin/bash的发行版(比如Debian)中工作。

票数 2
EN

Stack Overflow用户

发布于 2010-02-04 15:07:06

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

票数 2
EN

Stack Overflow用户

发布于 2010-02-04 22:47:56

另一种编写方式

代码语言:javascript
复制
if [ ! -d $LOCATION ]; then mkdir $LOCATION; fi

代码语言:javascript
复制
[ -d $LOCATION ] || mkdir $LOCATION
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2197881

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档