我遇到错误“意外标记‘完成’附近的语法错误”,并且无法弄清楚脚本。我的代码如下:
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" != ...
- 设置特定的 she-bang 行,以便使用您期望的 shell 解析脚本 - 无论是 bash、zsh、dash 还是普通 sh。
我将在这里花一点时间来调用 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
从引号 at 开始的所有内容$looptest"
都显示为红色,因为它被视为带引号的字符串。下一个"
停止引用,下一个又开始引用,因此脚本的引用和非引用部分是颠倒的。这一直持续到带有 的行#
,当现在不加引号时,会在该行的末尾开始注释,删除"
其后的效果,并恢复对脚本其余部分的引用。
shell 继续解析并看到关键字,done
而它实际上是do
在此之前期望的,因此出现错误。 (do
当然,在引用时没有被识别。)
如果没有#
,您会在下三行的括号中收到错误(它们是特殊的语法标记),如果没有它们,则会出现有关在查找结束引号时到达 EOF 的更具体的错误。