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++帮我们转换,都可以。

     

  • 相关阅读:
    中文词频统计
    【大数据应用期末总评】Hadoop综合大作业
    【大数据作业十一】分布式并行计算MapReduce
    【大数据作业十】分布式文件系统HDFS 练习
    【大数据作业九】安装关系型数据库MySQL 安装大数据处理框架Hadoop
    【爬虫综合大作业】腾讯视频——大家到底都在看什么?!
    【大数据作业七】爬取全部的校园新闻
    【大数据作业六】获取一篇新闻的全部信息
    【大数据作业五】理解爬虫原理
    【大数据作业四】中文词频统计
  • 原文地址:https://www.cnblogs.com/Cherie/p/3200288.html
Copyright © 2011-2022 走看看