zoukankan      html  css  js  c++  java
  • 写shell,运行出错:syntax error near unexpected token `$’do ”

    cygwin下面写shell,运行出错:syntax error near unexpected token `$’do ”

    写shell,运行出错:syntax error near unexpected token `$’do ”

     

    【问题】

    在cygwin下,用notepad++写了个简单的shell脚本,内容如下:

     

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    #!/bin/bash

    #remove *.bak in subfolder files

    echo 'remove *.bak'

    sub_folders=`ls`

    echo 'sub_folders='$sub_folders

    for each_item in $sub_folders; do

        if [ -d $each_item ]; then

            echo $each_item

        else

            echo $each_item "is file ------"

        fi

    done

    exit 0

     

    但是运行出错:

     

    1

    line 6: syntax error near unexpected token `$'do ''

     

    【解决过程】

    1.网上搜了下,参考:linux shell脚本报错:syntax error near unexpected token `

    然后去notepad++中,视图->显示符号->显示所有符号,然后就看到了预料到的,所有的回车换行都是windows的CR LF:

    得知是Linux和windows下的回车换行符不兼容的问题。

    所以,剩下的就是去将windows下面的CR LF,转换为Linux下面的LF,即可。

    此处,不需要再麻烦地去用其他dos2unix等工具了,notepad++就可以帮忙搞定:

    编辑->档案格式转换->转换为UNIX格式:

    即可将所有的 CR LF,转换为LF:

    所以,越加发现notepad++的强大之处了。

    然后再运行此shell脚本,即可正常运行了。

    【总结】

    linux/cygwin下面的shell脚本出现错误:

    syntax error near unexpected token `$’do ”

    是由于该脚本文件是在windows环境下创建编辑的,其默认是将所有的回车变成:

    CR加上 LF,而Linux/Unix中的回车只是LF,所以导致解释器不认,出现此错误。

    解决办法就是,将所有的CRLF转换为LF即可。

    转换的方法有多种,比如用dos2unix,或用此处的notepad++帮我们转换,都可以。

     

  • 相关阅读:
    Java实现 蓝桥杯VIP 算法训练 字符串逆序
    Java实现 蓝桥杯VIP 算法训练 字符串逆序
    Java实现 蓝桥杯VIP 算法训练 最长字符串
    Java实现 蓝桥杯VIP 算法训练 最长字符串
    Java实现 蓝桥杯VIP 算法训练 最长字符串
    Java实现 蓝桥杯VIP 算法训练 最长字符串
    Java实现 蓝桥杯VIP 算法训练 最长字符串
    Java实现 蓝桥杯VIP 算法训练 成绩的等级输出
    Java实现 蓝桥杯VIP 算法训练 成绩的等级输出
    Qt 自定义model实现文件系统的文件名排序
  • 原文地址:https://www.cnblogs.com/Cherie/p/3200288.html
Copyright © 2011-2022 走看看