「予期しない「完了」マーク付近の構文エラー」の問題を特定できません。

「予期しない「完了」マーク付近の構文エラー」の問題を特定できません。

「完了」マークの近くに予期しない構文エラーが発生しました。というエラーが発生し、スクリプトを特定できませんでした。私のコードは次のとおりです。

trap "rm ~/tmp/* 2> /dev/null; exit" 0 1 2 3
phonefile=~/sournce/corp_phones
looptest=y
while [ $looptest" = y ]
do
   clear
   cursor 1 4; echo "Corporate Phone List Additions"
   cursor 2 4; echo "=============================="
   cursor 4 4; echo "Phone Number: "
   cursor 5 4; echo "Last Name   : "
   cursor 6 4; echo "First Name  : "
   cursor 7 4; echo "Middle Init : "
   cursor 8 4; echo "Dept #      : "
   cursor 9 4; echo "Job Title   : "
   cursor 10 4; echo "Date Hired  :"
   cursor 12 4; echo "Add Another? (Y)es or (Q)uit "
   cursor 4 18; read phonenum
   if [ "$phonenum" = 'q' ]
      then
         clear; exit
   fi
   cursor 5 18; read lname
   cursor 6 18; read fname
   cursor 7 18; read midinit
   cursor 8 18; read deptno
   cursor 9 18; read jobtitle
   cursor 10 18; read datehired
#check to see if last name is not a blank before write to disk
   if [ "$lname" >  "        "]
      then
         echo $phonenum:$lname:$fname:$midinit:$deptno:$jobtitle:$datehired >> $phonefile
   fi
   cursor 12 33; read looptest
   if [ "$looptest" = 'q' ]
      then
        clear; exit
   fi
done

答え1

今、3つの障害物があります。

  1. 二重引用符がない -$looptest"次のようにする必要があります。"$looptest"
  2. >比較のために"$lname" > ...- 文字列は次のようになります。if [ "$lname" != ...
  3. bash、zsh、dash、または通常のshなど、必要なシェルを使用してスクリプトを解析するように特定のshe-bang行を設定します。

ここでしばらく時間をかけてshellcheck.netサービスを呼び出します。そのボックスにコードを貼り付けると、提案と警告が表示されます。

答え2

SEの構文の強調は問題を明らかにしますが、適切なエディタと同様に、色を注意深く読み、色が区別できるほど明確であることを願っています。

while [ $looptest" = y ]
do
   cursor 7 4; echo "Middle Init : "
   cursor 8 4; echo "Dept #      : "
   cursor 9 4; echo "Job Title   : "
   ...
done

引用符で始まるすべての項目は、引用符$looptest"付きの文字列として扱われるため、赤で表示されます。次は"引用を停止し、次は再び引用を開始するため、スクリプトで引用された部分と引用されていない部分が反転されます。これは引用符のない行まで続き#、引用符がない場合はその行の末尾でコメントを開始して"その余波を削除し、スクリプトの残りの部分への参照を復元します。

シェルは解析を続行し、以前にdone実際にdo期待していたキーワードを確認するため、エラーが発生します。 (doもちろん引用時には認識されません。)

それ以外の場合は、次#の3行(特殊構文マーカー)の括弧にエラーが発生し、括弧がない場合は、閉じる引用符を見つけるとEOFに到達することに関連するより具体的なエラーが発生します。

関連情報