电脑故障问答网

 找回密码
 立即注册
查看: 122|回复: 1

Linux执行shell脚本报错`$'\r''

[复制链接]

5

主题

7

帖子

19

积分

新手上路

Rank: 1

积分
19
发表于 2022-10-13 12:43:35 | 显示全部楼层 |阅读模式
前言

在window操作系统上使用notepad++开发shell脚本后,使其上传值Linux服务器,在终端执行shell脚本时,报`$'\r''错误,详细如下
[root@localhost soft]# sh auto56.sh
auto56.sh: line 12: syntax error near unexpected token `$'\r''
'uto56.sh: line 12: `function GeneralConfig()
[root@localhost soft]# 问题分析

原因

报错原因是因为脚本window操作系统和Linux操作系统换行符的编码不一样。
在Linux终端随便创建一个文件,假如内容并有换行符,检查如下:
Linux服务器上的换行符是 $
[root@localhost soft]# cat -A test.txt
a$
b$
c$
[root@localhost soft]# 检查在window编辑后上传至服务器的脚本,发现换行符是 ^M$,如下:
[root@localhost soft]# cat -A auto56.sh
#!/bin/bash^M$
# Check if user is root^M$
if [ $(id -u) != "0" ]; then^M$
    echo "Error: Please use Root to Install"^M$
    exit 1^M$
fi^M$
clear^M$
... ...综上,window操作系统的换行字符集编码和Linux操作系统下的换行字符集编码不一致。
解决方案

在Linux服务器上使用dos2unix命令转换文件格式,若dos2unix命令不存在,需自行安装。
dos2unix命令安装指令:
yum -y install dos2unix转换文件格式,指令如下:
[root@localhost soft]# dos2unix auto56.sh
dos2unix: converting file auto56.sh to Unix format ...
[root@localhost soft]# 再次检查文档,换行符以改为 $
[root@localhost soft]# cat -A auto56.sh
#!/bin/bash$
# Check if user is root$
if [ $(id -u) != "0" ]; then$
    echo "Error: Please use Root to Install"$
    exit 1$
fi$
clear$
回复

使用道具 举报

0

主题

3

帖子

4

积分

新手上路

Rank: 1

积分
4
发表于 2025-3-9 22:17:01 | 显示全部楼层
元芳你怎么看?
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

云顶设计嘉兴有限公司模板设计.

免责声明:本站上数据均为演示站数据,如购买模板可以上DISCUZ应用中心购买,欢迎惠顾.

云顶官方站点:云顶设计 模板原创设计:云顶模板   Powered by Discuz! X3.4© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表