刚刚开始学习bash,简单的脚本也看懂了,模仿着写,怎么都不对阿。。。
总是这样的错误:
syntax error near unexpected token `then'
或
if[ 1 -ne 1 ]: command not found或
syntax error: unexpected end of file
让我一一道来:
第一个和第二个是一样的错误,都是因为恼人的空格引起的,bash对空格的要求很严格,在“if”与“ [ ”之间,“[ ”与变量之间必须有空格......
第三个问题是,文件结尾的问题,原因基本有二,一是检查各条件于循环的结束,if与fi,do与done,begin与end要成对出现,如果只用了if但是没有fi,就会提示这样的错误;
二是dos文件传输到unix系统时,会在每行的结尾多一个^M,在vi的时候,当你用如下命令:
>>vi dos.txt
>>:set fileformat=unix
>>:w
就会看到这些存在于每行结尾的^M符号,然后把^M删除就可以了
在百度空间里看到一篇文章写的很清晰,帮我大忙,贴在这里,供大家参考
举例如下:
1:
定义变量时, =号的两边不可以留空格.
eg:
gender=femal------------right
gender =femal-----------wrong
gender= femal-----------wrong
2
条件测试语句 [ 符号的两边都要留空格.
eg:
if [ $gender = femal ]; then-------right.
echo "you are femal";
fi
if[ $gender...-----------------------wrong
if [$gender...----------------------wrong.
3
条件测试的内容,如果是字符串比较的话, 比较符号两边要留空格!
eg:
if [ $gender = femal ]; then-------right.
if [ $gender= femal ]; then--------wrong.
if [ $gender=femal ]; then---------wrong.
4
如果if 和 then写在同一行, 那么,注意, then的前面要跟上 ; 号.
如果 then 换行写, 那么也没问题.
eg:
if [ $gender = femal ]; then-------right.
if [ $gender = femal ]
then-------------------------------right.
if [ $gender = femal ] then-------wrong. then前面少了 ; 号.
提示出错信息:
syntax error near unexpected token then
同理,还有很多出错信息 比如
syntax error near unexpected token fi 等都是这样引起的.
5
if 后面一定要跟上 then. 同理
elif 后面一定要跟上 then.
不然提示出错信息:
syntax error near unexpected token else