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

本文介绍了一个在Cygwin环境下使用notepad++编写Shell脚本遇到的语法错误问题及解决过程。错误源于Windows与Linux换行符不兼容,通过调整notepad++设置将CRLF转换为LF解决了问题。
部署运行你感兴趣的模型镜像

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

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

 

【问题】

在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\r''

 

【解决过程】

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\r”

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

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

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

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

 

转载于:https://www.cnblogs.com/Cherie/p/3200288.html

您可能感兴趣的与本文相关的镜像

Stable-Diffusion-3.5

Stable-Diffusion-3.5

图片生成
Stable-Diffusion

Stable Diffusion 3.5 (SD 3.5) 是由 Stability AI 推出的新一代文本到图像生成模型,相比 3.0 版本,它提升了图像质量、运行速度和硬件效率

从你提供的错误信息来看,这些问题通常是由于尝试在 Bash Shell 中直接输入了不适合命令行环境的内容(例如 SQL 语句、配置文件内容或其他非命令文本),导致语法错误。 ### 错误分析 1. `-bash: syntax error near unexpected token '('` - 这种错误通常出现在试图执行包含括号的字符串或命令时,Bash 遇到了意外的括号。 2. `uid=0(root): command not found` - 这表明你在命令前加上了一些无效的关键字或者变量赋值,比如 `uid=0(root)` 不是一个有效的命令前缀。 3. `CHARACTER: command not found` 和 `SET: command not found` - 显然是把本应在 SQL 或者其他上下文中使用的关键词当作了 shell 命令来执行。 ### 解决办法 #### 1. 清理当前会话 如果你不小心粘贴了很多不适当的命令并且现在无法正常使用命令行,可以按以下步骤清理: - **Ctrl + C** 终止当前正在执行的命令。 - 输入 `reset` 来重置终端屏幕显示: ```sh reset ``` - 如果仍然有问题,关闭并重新打开一个新的 Xshell 会话窗口。 #### 2. 检查历史记录 检查之前的历史命令是否包含了非法指令,并清除它们: ```sh history | tail -n 20 # 查看最近的 20 条命令 # 根据需要删除特定编号的历史命令 history -d <command_number> ``` #### 3. 正确区分命令与脚本文档 当你想要执行一段复杂的脚本或代码块(如 SQL 脚本)时,请确保将其放在合适的位置而不是直接敲入命令行。你可以这样做: - **保存成文件再运行** - 把所有 SQL 内容保存到 `.sql` 文件中; - 使用 MySQL 客户端读取该文件并执行命令: ```sh mysql -u root -p < /path/to/your_script.sql ``` - **使用管道传递给解释器** - 直接通过管道将 SQL 语句传送给 MySQL 客户端: ```sh echo "CREATE DATABASE test;" | mysql -uroot -p ``` #### 4. 学习基本的 Shell 命令结构 了解一些基础的 Linux/Bash 命令及其参数用法有助于避免类似的问题发生。建议花点时间熟悉常用的命令格式和选项。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值