代码之家  ›  专栏  ›  技术社区  ›  corydoras

为什么这个if语句在BourneShell中失败了?

  •  1
  • corydoras  · 技术社区  · 16 年前

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

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

    3 回复  |  直到 14 年前
        1
  •  2
  •   AndiDog    16 年前

    我想你的 /bin/sh 不要再指向Bourne Shell,因为脚本适用于其他人(请参见对您问题的评论)。

    舍邦应该是 /bin/bash 对于伯恩来说,又是壳牌脚本,但是 /bin/SH 将在具有符号链接的某些分发版(如Debian)中工作 /bin/sh -> /bin/bash .

        2
  •  2
  •   ghostdog74    16 年前

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

        3
  •  2
  •   glenn jackman    16 年前

    另一种写作方式

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

    [ -d $LOCATION ] || mkdir $LOCATION