"예기치 않은 '완료' 표시 근처의 구문 오류" 문제를 파악할 수 없습니다.

"예기치 않은 '완료' 표시 근처의 구문 오류" 문제를 파악할 수 없습니다.

"'완료' 표시 근처에 예기치 않은 구문 오류가 발생했습니다."라는 오류가 발생하고 스크립트를 파악할 수 없습니다. 내 코드는 다음과 같습니다.

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물론 인용시에는 인식되지 않습니다.)

그렇지 않은 경우 #다음 세 줄(특수 구문 표시자)의 괄호에 오류가 발생하며, 괄호가 없으면 닫는 따옴표를 찾을 때 EOF에 도달하는 것과 관련된 보다 구체적인 오류가 발생합니다.

관련 정보