2013-12-10 4 views
0

я иметь следующую функцию в моей «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-Key. Но мой вопрос не ответил правильным ответом.

Что я делаю неправильно?

ответ

0

Вы должны использовать [[]] вместо [, так как это встроенный bash, который ведет себя лучше.

Обычно read the_text с if [[ -z "$the_var" ]]; then echo "text empty" должно быть достаточно.

Я не проверял на ' ' символы. Вместо этого я бы проверял, существует ли введенный путь или использует предоставленный вами по умолчанию.

См. Read a variable in bash with a default value о том, как установить переменную, если значение не было введено.

1

В отдельных квадратных скобках, всегда цитируют переменные:

if [ -z "$var" ] 

Или переключатель двойных квадратов:

if [[ -z $var ]] 
Смежные вопросы