Оператор If-Else не работает - синтаксическая ошибка рядом с неожиданным токеном 'fi'

Я начинаю писать сценарий, который является исключительно файловым менеджером, и я устанавливаю функцию, предлагающую пользователю установить их предпочтительный текстовый редактор, и он всегда заканчивается сообщением об ошибке:

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

Это код:

#!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()

Что-то мне не хватает?

Спасибо

0
20.03.2016, 20:12
2 ответа
  • используйте #!/bin/bash в качестве shebang.
  • нет необходимости в [ [ ... ] ]
  • "$answer" -eq "nano" && "vi" && "vim" && "emacs" не будет проверять ответ на соответствие этим четырем словам.

определение функции

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
  • это проверит, что ответ является одним из четырех допустимых редакторов.
  • значение возвращается в EDITOR
  • export $answer=, скорее всего, не сработает (в первый раз) или даст неожиданный результат (в следующий раз)
  • используйте $answer для вызова редактора (или $answer "$myfile"),
  • используйте export EDITOR=$answer для его установки,
  • или еще лучше export EDITOR=$(which $answer).
0
28.01.2020, 02:35

Второй и третий

editor ()

должны быть просто

editor

. Скобки нужны только для определения функции.

Синтаксический анализатор bash жалуется на отсутствие ';' после () , но это только часть проблемы.

2
28.01.2020, 02:35

Теги

Похожие вопросы