zoukankan      html  css  js  c++  java
  • 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'

    打开脚本文件如下:

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

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


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

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

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

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

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

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

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

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


  • 相关阅读:
    PHP读取XML数据中CDATA内数值
    微信支付报ip错,怀疑是因为不能正确获取$_Server[addr])ip导致的
    微信支付错误两个问题的解决:curl出错,错误码:60
    tp框架 验证码的应用注意事项
    PHP结合jQuery.autocomplete插件实现输入自动完成提示的功能
    mysql存储小数
    windows服务器剪贴板不能共用的解决办法
    网页设为首页和添加收藏
    网页qq客服代码并自定义图片
    windows apache开启url rewrite
  • 原文地址:https://www.cnblogs.com/cnsec/p/3789786.html
Copyright © 2011-2022 走看看