当前位置:首页 > 服务端 > shell script中的syntax error near unexpected token `then' 问题

shell script中的syntax error near unexpected token `then' 问题

其实这是一个shell下判断符号 [ ] 加空格的问题,一定要小心

编写《鸟哥》给的示例程序时,运行时出现:syntax error near unexpected token `then'

[root@localhost scripts]# vi sh06-02.sh
[root@localhost scripts]# ./sh06-02.sh
Please input(Y/N): Y
./sh06-02.sh: line 8: syntax error near unexpected token `then'
./sh06-02.sh: line 8: `if[ "$yn" == "Y" ] || [ "$yn" == "y" ]; then'

打开脚本文件如下:

shell script中的syntax error near unexpected token `then' 问题 _ JavaClub全栈架构师技术笔记

发现then和fi不匹配,红底白字高亮的意思就是此处可能有错?,

上网搜索,原来if和中括号[]之间也需要空格键隔开,修改后vim语法就不报错了,如下:

shell script中的syntax error near unexpected token `then' 问题 _ JavaClub全栈架构师技术笔记


关于判断符号[ ],也就是中括号,下面引自鸟哥的解释:

除了我们很喜欢使用的 test 之外,其实,我们还可以利用判断符号『 [ ] 』(就是中括号啦) 来进行数据的判断呢!举例来说,如果我想要知道 $HOME 这个变量是否为空的,可以这样做:

[root@www ~]# [ -z "$HOME" ] ; echo $?

使用中括号必须要特别注意,因为中括号用在很多地方,包括万用字节与正规表示法等等,所以如果要在 bash 的语法当中使用中括号作为 shell 的判断式时,必须要注意中括号的两端需要有空白字节来分隔喔!假设我空白键使用『□』符号来表示,那么,在这些地方你都需要有空白键:

[  "$HOME"  ==  "$MAIL"  ]
[□"$HOME"□==□"$MAIL"□]
 ↑       ↑  ↑       ↑

其实if与[]之间也是需要空格键隔开的

上面的例子在说明,两个字串 $HOME 与 $MAIL 是否相同的意思,相当於 test $HOME = $MAIL 的意思啦!而如果没有空白分隔,例如 [$HOME==$MAIL] 时,我们的 bash 就会显示错误信息了!这可要很注意啊!所以说,你最好要注意:

  • 在中括号 [] 内的每个组件都需要有空白键来分隔;
  • 在中括号内的变量,最好都以双引号括号起来;
  • 在中括号内的常数,最好都以单或双引号括号起来。


作者:SEC.VIP_网络安全服务
来源链接:https://www.cnblogs.com/cnsec/p/3789786.html

版权声明:
1、Java侠(https://www.javaxia.com)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。





本文链接:https://www.javaxia.com/server/125783.html

标签: syntax error
分享给朋友:

“shell script中的syntax error near unexpected token `then' 问题” 的相关文章