执行shell脚本出现 $‘ \r‘ 符号导致执行失败【解决】

👨‍🎓博主简介

  🏅CSDN博客专家
  🏅云计算领域优质创作者
  🏅华为云开发者社区专家博主
  🏅阿里云开发者社区专家博主
💊交流社区:运维交流社区 欢迎大家的加入!
🐋 希望大家多多支持,我们一起进步!😄
🎉如果文章对你有帮助的话,欢迎 点赞 👍🏻 评论 💬 收藏 ⭐️ 加关注+💗


文章目录

  • 问题
  • 问题的排查及原因
  • 解决方法一:修改文件 文件格式
  • 解决方法二:去除文件类型为“dos”文件中的回车

问题

  在执行脚本的时候,我们有时候会遇到添加一个变量值,明明读到的值是0或者1,在外面执行此命令都是没问题的,而且脚本中写的判断也是没问题的,但是为什么执行的结果是没有找到0或者1呢?

问题的排查及原因

  • 脚本示例(test.sh):
#!/bin/bash#获取脚本执行的路径
DIR=$(cd $(dirname $0) && pwd )num=$(cat $DIR/peizhi.properties | egrep "^onenumber" | awk -F "=" '{print $2}')if [ "$num" == 0 ];thenecho -e "配置文件中\e[1;34m测试服务\e[0m\e[1;32m已打开\e[0m"
elseecho -e "配置文件中\e[1;31m测试服务没有打开\e[0m,跳过此判断"
fi
  • 配置文件示例(peizhi.properties):
file=1.txt
onenumber=0
format=json

1、我们先分析脚本:

查看当前目录下的peizhi.properties配置文件中的以onenumber开头的文件;

= 后面的值,如果为0,那么就输入已经打开这个配置了;如果不等于0那么就输出没有打开这个配置。

2、然后我们先在linux命令行执行此命令: cat peizhi.properties | egrep "^onenumber" | awk -F "=" '{print $2}',查到的结果为:0,那么我们应该输出“配置文件中测试服务已打开”

3、放到脚本里执行:发现直接结果是:“配置文件中测试服务没有打开,跳过此判断”

image-20240506131109078

4、打开配置文件和脚本看看文件的格式,是不是都是unix的;vim 打开配置文件和脚本,执行::set ff,查看此脚本或者文件的文件格式;

image-20240506132210216

image-20240506132225669

可以看到,脚本是没问题的,是unix格式的;但是配置文件就是dos格式的了;dos格式为windows(CR LF),在windows上编写的shell脚本,在Linux系统中运行就会有\r ^M等错误信息;

所以,两个脚本文件格式都必须为unix格式,查看脚本是否为unix格式,vim进入脚本编辑器,执行::set ff查看脚本的文件格式;如果是dos的就是windows格式的,如果是unix就是linux格式的;dos格式的在windows回车是有一个隐藏的内容的\r,所以在执行脚本的时候会多出现一个\r

5、然后我们再去看一下,执行脚本的过程;sh -x test.sh

发现多了一个\r,然后导致下面的判断识别成了0\r0不匹配了,所以输出了没有打开此测试服务;

image-20240506141334744


所以,得出的结论是:因为两个文件中的 配置文件的文件格式为dos格式,dos为windows模式,回车会有\r占位符,所以,导致执行shell脚本的时候多了一个\r

两种解决方法:

  • 1、修改文件的文件格式
  • 2、去除文件中的回车:\r

解决方法一:修改文件 文件格式

当我们知道是配置文件的文件类型是dos类型,那么我们就可以只修改配置文件的文件类型即可;

  • 修改文件 文件格式

1、vim 进入编辑模式

2、执行: set ff=unix

3、:wq保存退出

4、再次进入查看文件格式::set ff

image-20240506151715360

image-20240506151812879

5、执行脚本带详细输出

root@7b64cee30106:~# sh -x test.sh 
+++ dirname test.sh
++ cd .
++ pwd
+ DIR=/root
++ cat /root/peizhi.properties
++ grep '^onenumber'
++ awk -F = '{print $2}'
+ num=0
+ '[' 0 == 0 ']'
+ echo -e '配置文件中\e[1;34m测试服务\e[0m\e[1;32m已打开\e[0m'
配置文件中测试服务已打开

可以发现已经是 0 = 0 了,那么问题就解决了;

image-20240506151925543

解决方法二:去除文件类型为“dos”文件中的回车

当我们知道是配置文件的文件类型是dos类型,那么我们就只去除配置文件里的\r就行;

  • 去除文件类型为“dos”文件中的回车\r
sed -i "s/\r//g" peizhi.properties

命令解析:

sed -i:		修改配置文件 
"s/\r//g":	将\r改为空格,文件中所有
peizhi.properties	要修改的文件名
  • 执行脚本带详细输出
root@7b64cee30106:~# sh -x test.sh 
+++ dirname test.sh
++ cd .
++ pwd
+ DIR=/root
++ cat /root/peizhi.properties
++ grep '^onenumber'
++ awk -F = '{print $2}'
+ num=0
+ '[' 0 == 0 ']'
+ echo -e '配置文件中\e[1;34m测试服务\e[0m\e[1;32m已打开\e[0m'
配置文件中测试服务已打开

可以发现已经是 0 = 0 了,那么问题就解决了;

image-20240506151925543



小知识:

  在windows上使用notepad++可以看到该文件的文件类型是什么;打开一个文件或者脚本在右下角可以看到。

image-20240506154549293

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/34139.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深信服AC行为管理报错

报错信息: e0:alarmevent.cpp:54 exec cmd: /ac/common/app/kvupd -v failed 说明: 截止到上网行为管理12.0.80及全网行为管理13.0.102版本,AC凌晨(0点-7点)会重启进程让设备更好的运行,凌晨重启告警属于正…

Leetcode刷题(四十二)

美丽下标对的数目&#xff08;Easy&#xff09; 给你一个下标从 0 开始的整数数组 nums 。如果下标对 i、j 满足 0 ≤ i < j < nums.length &#xff0c;如果 nums[i] 的 第一个数字 和 nums[j] 的 最后一个数字 互质 &#xff0c;则认为 nums[i] 和 nums[j] 是一组 美丽…

unity基础 常用的API及脚本模板

对于刚学unity的新手&#xff0c;c#脚本基础尤为重要&#xff0c;一文带你搞定一些简单实用的小脚本&#xff0c;让你轻松入门。 常用的API &#xff08;部分源于网络&#xff0c;侵权滴删&#xff09; 1.Transform Transform是用于控制游戏对象位置、旋转和缩放的组件。其AP…

android 彩虹进度条自定义view实现

实现一个彩虹色进度条功能&#xff0c;不说明具体用途大家应该能猜到。想找别人造的轮子&#xff0c;但是没有合适的&#xff0c;所以决定自己实现一个。 相关知识 android 自定义view LinearGradient 线性渐变 实现步骤 自定义view 自定义一个TmcView类继承View 重写两…

SpringBoot系列之搭建WebSocket应用

SpringBoot系列之@ServerEndpoint方式开发WebSocket应用。在实时的数据推送方面,经常会使用WebSocket或者MQTT来实现,WebSocket是一种不错的方案,只需要建立连接,服务端和客户端就可以进行双向的数据通信。很多网站的客户聊天,也经常使用WebSocket技术来实现。 WebSocket…

npm error code EUNSUPPORTEDPROTOCOL 解决

更换包管理工具 npm i -g pnpm pnpm install pnpm run dev 参考 https://blog.csdn.net/qq_42592823/article/details/137541827

Mac角色扮演游戏推荐:仙剑奇侠传四 for Mac 安装包

《仙剑奇侠传四》拥有精美的画面、优秀的音乐和丰富的剧情内容&#xff0c;成为了仙剑系列中的经典作品之一。游戏在发行后获得了极高的口碑和销量&#xff0c;成为了仙剑系列中的经典之作。在游戏中&#xff0c;玩家将扮演不同的角色&#xff0c;进行冒险探索、与各种敌人战斗…

# bash: chkconfig: command not found 解决方法

bash: chkconfig: command not found 解决方法 一、chkconfig 错误描述&#xff1a; 这个错误表明在 Bash 环境下&#xff0c;尝试执行 chkconfig 命令&#xff0c;但是系统找不到这个命令。chkconfig 命令是一个用于管理 Linux 系统中服务的启动和停止的工具&#xff0c;通常…

2024 年网站分析必备:Fullstory、APILayer 及 Openinstall API 服务

在当今数字化的时代&#xff0c;网站和应用的成功运营离不开对用户行为和网站性能的深入洞察。2024 年的今天&#xff0c;随着技术的不断发展&#xff0c;各种先进的 API 服务应运而生&#xff0c;为我们提供了强大的工具来优化用户体验、保障网站可用性以及提升 App 推广效果。…

Linux编译器 gcc/g++

gcc/g的简介 GCC&#xff08;英文全拼&#xff1a;GNU Compiler Collection&#xff09;是 GNU 工具链的主要组成部分&#xff0c;是一套以 GPL 和 LGPL 许可证发布的程序语言编译器自由软件&#xff0c;由 Richard Stallman 于 1985 年开始开发。gcc是GCC中的C语言编译器&…

ES6及其后续版本的新特性的理解

ES6及其后续版本&#xff08;如ES7、ES8等&#xff09;的新特性的理解 ES6&#xff08;ECMAScript 2015&#xff09;引入了一系列重要的语言和语法特性&#xff0c;旨在提升JavaScript的简洁性和可读性。后续的ES7、ES8等版本继续扩展了这些特性。以下是一些关键新特性&#x…

爱迪特两年创业板上市路:销售费用率远高同行,侵权风险引关注

《港湾商业观察》施子夫 王璐 从2022年4月7日就冲刺创业板的爱迪特&#xff08;秦皇岛&#xff09;科技股份有限公司&#xff08;以下简称&#xff0c;爱迪特&#xff09;&#xff0c;预计将很快登陆资本市场。 爱迪特日前披露中签结果&#xff1a;本次发行股份数量为约1902…

关于最强模型Claude 3.5 Sonnet,你需要知道的10条总结!

大家好,我是木易,一个持续关注AI领域的互联网技术产品经理,国内Top2本科,美国Top10 CS研究生,MBA。我坚信AI是普通人变强的“外挂”,所以创建了“AI信息Gap”这个公众号,专注于分享AI全维度知识,包括但不限于AI科普,AI工具测评,AI效率提升,AI行业洞察。关注我,AI之…

Python自动化(8)——pyqt5界面

Python自动化(8)——pyqt5界面 注意&#xff1a;pyqt5的界面使用时必须有app QApplication(sys.argv)这行代码&#xff0c;否则会出现错误并且无法显示窗口&#xff1a;QWidget: Must construct a QApplication before a QWidget 一些基础的控件 QMainWindow QMainWindow是…

Java NIO Buffer概念

针对每一种基本类型的 Buffer &#xff0c;NIO 又根据 Buffer 背后的数据存储内存不同分为了&#xff1a;HeapBuffer&#xff0c;DirectBuffer&#xff0c;MappedBuffer。 HeapBuffer 顾名思义它背后的存储内存是在 JVM 堆中分配&#xff0c;在堆中分配一个数组用来存放 Buffe…

【经验分享】免费版虚拟机VMware Workstation Pro 17下载方式

【经验分享】免费版虚拟机VMware Workstation Pro 17下载方式 前言一、免费虚拟机下载方式二、 安装过程总结 前言 我真的是服了&#xff0c;现在的CSDN时效性为什么这么差了。都快一个月了还没有博主更新个人免费版虚拟机VMware Workstation Pro&#xff0c;甚至很多人还不知…

【运维】使用 Docker Compose 快速启动项目全流程指南

文章目录 docker-compose启动项目流程1. 安装 Docker 和 Docker Compose2. 准备 Docker Compose 文件3. 启动 Docker Compose 服务4. 检查运行状态5. 停止服务示例 docker-compose.yaml 文件 为什么要用docker-compose1. 微服务架构的实现2. 依赖管理3. 简化开发和测试环境4. 方…

RFID技术在汽车轮胎加工工艺中的革新应用

RFID技术在汽车轮胎加工工艺中的革新应用 物联网技术的飞速发展&#xff0c;无线射频识别&#xff08;Radio Frequency Identification&#xff0c;简称RFID&#xff09;技术因其独特的优势&#xff0c;在各行各业中展现出巨大的应用潜力。特别是在汽车制造业&#xff0c;RFID…

推荐一款好用的浏览器翻译插件——欧路翻译

近些年&#xff0c;机器翻译的效果越来越好&#xff0c;于是也有更多的开发者&#xff0c;开发了免费使用的浏览器翻译插件。这大大的帮助了我们查看国外的网站&#xff0c;有利于大家获取更多的信息。 在此&#xff0c;给大家推荐一款免费好用的浏览器插件——欧路翻译。支持…

我在高职教STM32——LCD液晶显示(4)

大家好&#xff0c;我是老耿&#xff0c;高职青椒一枚&#xff0c;一直从事单片机、嵌入式、物联网等课程的教学。对于高职的学生层次&#xff0c;同行应该都懂的&#xff0c;老师在课堂上教学几乎是没什么成就感的。正因如此&#xff0c;才有了借助 CSDN 平台寻求认同感和成就…