Declaração If-Else não funciona - erro de sintaxe próximo do token inesperado 'fi'

0

Estou começando a escrever um script que é apenas um gerenciador de arquivos e estou configurando uma função solicitando que o usuário defina seu editor de texto preferido e sempre termina com uma mensagem de erro:

/home/user/bin/manager: line 12: syntax error near expected token 'fi'
/home/user/bin/manager: line 12: 'fi'

Este é o código:

#!bash/bin
#File managing shell
editor() {
read -p "What file editor would you like to use?    (Nano)  or  (Vi)m   " answer
export $answer=$(echo "$answer" | tr '[:upper:]' '[:lower:]')
if [ [ "$answer" -eq "nano" && "vi" && "vim" && "emacs" ] ]
then
editor="$answer"
else
echo "This is embarassing, I didn't understand your input..."
editor ()
fi
}
echo -e "" #this area tells the user he commands and etc. it takes forever to type...
sleep 1
editor()

Há algo que me falta?

Obrigado

    
por Scripty Coder 20.03.2016 / 19:12

2 respostas

0
  • use #!/bin/bash como shebang.
  • não há necessidade de [ [ ... ] ]
  • "$answer" -eq "nano" && "vi" && "vim" && "emacs" não testará a resposta novamente nessas quatro palavras.

definição de função

while read -p "What file editor would you like to use?    (Nano)  or  (Vi)m   " answer
do 
  answer=$(echo "$answer" | tr '[:upper:]' '[:lower:]')
  case $answer in 
  ( nano | vi | vim | emacs )
     $answer ;
     ## OR
     export EDITOR=$answer
     break 
     ;;
    ( * )
     echo "This is embarassing, I didn't understand your input..."
     ;;
   esac
done
  • isso verificará se a resposta é um dos quatro editores válidos.
  • o valor é retornado em EDITOR
  • export $answer= provavelmente falhará (primeira vez) ou dará um resultado inesperado (próxima vez)
  • use $answer para chamar o editor (ou $answer "$myfile" ),
  • use export EDITOR=$answer para defini-lo,
  • ou melhor ainda export EDITOR=$(which $answer) .
por 20.03.2016 / 19:26
2

O segundo e o terceiro

editor ()

deve ser apenas

editor

Você precisa dos parênteses apenas para a definição da função.

O analisador do bash está reclamando da falta de ';' após o () , mas isso é apenas parte do problema.

    
por 20.03.2016 / 19:13