If-Else ステートメントが機能しません。予期しないトークン "fi"の近くに構文エラーがあります。

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

私が逃したものはありますか?

ありがとう

答え1

2番目と3番目

editor ()

ただしなければならない

editor

括弧は関数定義にのみ必要です。

bashのパーサーは';'欠落について文句を言います()が、これは問題の一部です。

答え2

  • #!/bin/bashShebangとして使用されます。
  • 不要な[ [...] ]
  • "$answer" -eq "nano" && "vi" && "vim" && "emacs"この4つの単語の答えはテストされていません。

機能定義

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
  • 答えが有効な編集者の4人のうちの1人であることを確認してください。
  • 値がエディタに返されます。
  • export $answer=失敗(最初)または予期しない結果(次回)が発生する可能性があります
  • $answer編集者(または$answer "$myfile")に電話をかけるには
  • export EDITOR=$answer設定のために、
  • またはより良いですexport EDITOR=$(which $answer)

関連情報