"'완료' 표시 근처에 예기치 않은 구문 오류가 발생했습니다."라는 오류가 발생하고 스크립트를 파악할 수 없습니다. 내 코드는 다음과 같습니다.
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가지 장애물이 있습니다.
- 큰따옴표 누락
$looptest"
- 다음과 같아야 합니다."$looptest"
>
비교를 위해"$lname" > ...
-- 문자열은 다음과 같아야 합니다.if [ "$lname" != ...
- 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에 도달하는 것과 관련된 보다 구체적인 오류가 발생합니다.