提示答案的结果不为null或为空字符串

时间:2013-12-10 09:07:14

标签: bash

我的“update.sh”文件中有以下功能:

#!/bin/bash
updateSymfony()
{
    path=/var/www/symfony

    echo "Falls der Symfony-Pfad abweichend von /var/www/symfony ist, geben Sie in bitte hier an, ansonsten nur Enter drücken"
    echo " "
    read pathanswer
    echo $path
    echo $pathanswer
    if [ -n $pathanswer ]
       then
            if [ $pathanswer!="" ]
                then
                    if [ $pathanswer!=" " ]
                        then
                            if [ -d "$pathanswer" ]
                                then
                                    $path=$pathanswer
                                else
                                    echo "Leider existiert der Pfad $pathanswer nicht"
                                    return
                            fi
                    fi
            fi
    fi

    if [ -d "$path" ]; then

            cp $path $path-backup -R
            cd $path

            php composer.phar selfupdate

            php composer.phar update

            clearCache

            clearCacheProd

            setOwner
    else
            echo "Es wurde kein Symfony gefunden"
    fi

}

我想问一下提示答案是否为空。这应该是我按下Enter键的时候。但我的if没有回答正确答案。

我做错了什么?

2 个答案:

答案 0 :(得分:1)

在单个方括号中,始终引用变量:

if [ -z "$var" ]

或者,切换到双方格:

if [[ -z $var ]]

答案 1 :(得分:0)

您应该使用[[]]代替[,因为它是内置的bash,表现更好。

通常read the_text if [[ -z "$the_var" ]]; then echo "text empty"就足够了。

我不会检查' '字符。相反,我会检查输入的路径是否存在或使用您提供的默认值。

如果没有输入任何值,请参见Read a variable in bash with a default value如何设置变量。