执行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 ];then
        echo -e "配置文件中\e[1;34m测试服务\e[0m\e[1;32m已打开\e[0m"
else
        echo -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.mfbz.cn/a/742199.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

stm32单片机程序烧写方式ISP和IAP区别

在线编程目前有两种实现方法:在系统编程(ISP)和在应用编程(IAP)。 ISP一般是通过单片机专用的串行编程接口对单片机内部的Flash存储器进行编程,而IAP技术是从结构上将Flash存储器映射为两个存储体&#xf…

Trilium Notes浏览器插件保存网页内容到docker私有化部署

利用Trilium浏览器插件可以很方便的把网页内容保存到Trilium,需要先在docker部署好trilium,还没有部署的可以先看这篇文章:trilium笔记私有化部署-www.88531.cn资享网 1.下载Trilium浏览器插件:https://www.npspro.cn/33462.html…

PyTorch 2.2重大升级:引入FlashAttention-2,性能暴增2倍!

【新智元导读】新的一年,PyTorch也迎来了重大更新,PyTorch 2.2集成了FlashAttention-2和AOTInductor等新特性,计算性能翻倍。 新的一年,PyTorch也迎来了重大更新! 继去年十月份的PyTorch大会发布了2.1版本之后&#…

Python笔记 文件的写,追加,备份操作

一、文件的写操作 案例演示: # 1.打开文件 f open(python.txt,w)# 2.文件写入 f.write(hello world)# 3.内容刷新 f.flush() 注意: 直接调用write,内容并为真正的写入文件,二十会积攒在程序的内存中,称之为缓冲区…

【Matlab】CNN-LSTM分类 卷积神经网络-长短期记忆神经网络组合模型(附代码)

资源下载: https://download.csdn.net/download/vvoennvv/89466499 分类算法资源合集:https://download.csdn.net/download/vvoennvv/89466519 目录 Matlab SVM支持向量机分类算法 Matlab RF随机森林分类算法 Matlab RBF径向基神经网络分类算法 Ma…

轻松掌握App推广命脉!Xinstall渠道效果统计功能,你的营销利器

在移动互联网时代,App的推广与运营成为了每个开发者、运营者必须面对的重要课题。然而,如何精准地掌握App的推广效果,优化渠道投放,成为了众多推广者心中的痛点和难题。今天,我们将为大家介绍一款能够轻松解决这一问题…

象战----第十二届中山市邀请赛正赛

本次的题解一定让大家享受脑细胞碰撞与再生死亡的感受!定然酣畅淋漓!请耐心的读完 简称:让脑袋死机。。。 象战 老规矩先分析在打码: 注意到题目告诉我们:四个角落是不能放的 那么 我们设象在(i,j).(注意&#xff1a…

ONLYOFFICE 8.1版本桌面编辑器测评:重塑办公效率的巅峰之作

在数字化办公日益普及的今天,一款高效、便捷且功能强大的桌面编辑器成为了职场人士不可或缺的工具。ONLYOFFICE 8.1版本桌面编辑器凭借其卓越的性能和丰富的功能,成功吸引了众多用户的目光。今天,我们将对ONLYOFFICE 8.1版本桌面编辑器进行全…

Spring Boot整合Druid:轻松实现SQL监控和数据库密码加密

文章目录 1 引言1.1 简介1.2 Druid的功能1.3 竞品对比 2 准备工作2.1 项目环境 3 集成Druid3.1 添加依赖3.2 配置Druid3.3 编写测试类测试3.4 访问控制台3.5 测试SQL监控3.6 数据库密码加密3.6.1 执行命令加密数据库密码3.6.2 配置参数3.6.3 测试 4 总结 1 引言 1.1 简介 Dru…

Kompas AI自然语言处理能力对比

一、引言 自然语言处理(NLP)是衡量人工智能(AI)系统智能程度的重要指标之一。NLP技术的进步使得机器能够理解、解释和生成人类语言,在各个领域中发挥了巨大的作用。本文将对比Kompas AI与其他主要AI产品在NLP方面的表…

北京互动阅读app开发,“身”临其境,阅读精彩

随着大数据与智能化的不断发展进步,线上阅读软件也越来越多,为了缓解对传统翻页阅读方式产生的疲劳,人们对线上阅读提出了新的要求。对此,与智能科技相结合的北京互动阅读app开发,以高互动、高体验感的优势&#xff0c…

【LLM】GLM系列模型要点

note 文章目录 noteGLM一、数据层面1. 预训练数据 二、GLM4模型层面三、GLM-4 All Tools四、GLM的其他技术Reference GLM Paper:https://arxiv.org/abs/2406.12793 GitHub:https://github.com/THUDM HF:https://huggingface.co/THUDM 经过…

监督学习(二)线性分类

每个样本都有标签的机器学习称为监督学习。根据标签数值类型的不同,监督学习又可以分为回归问题和分类问题。分类和回归是监督学习的核心问题。 回归(regression)问题中的标签是连续值。分类(classification)问题中的标签是离散值。分类问题根据其类别数量又可分为…

ADC + 数码管显示

REVIEW 前面已经学习过: ADC:ADC模-数转换原理与实现-CSDN博客 key:基于状态机的按键消抖实现-CSDN博客 数码管:SPI接口的74HC595驱动数码管实现_用spi和hc74595通信-CSDN博客 1. 今日摸鱼计划 按键启动ADC 将结果显示在数码管…

OnlyOffice-8.1版本深度测评

2024年6月19日,ONLYOFFICE 发布了最新版本 8.1,带来了超过30项新功能和432个 bug 修复。本文将详细评测该版本的新功能和改进,帮助用户全面了解这一升级带来的实际体验提升。 一、功能全面的 PDF 编辑器 PDF 是日常工作中不可或缺的文件格式…

汽车汽配图纸管理、产品研发管理解决方案

汽车汽配图纸管理、产品研发管理解决方案 随着全球汽车市场的快速发展,中国汽车汽配行业迎来了前所未有的发展机遇。然而,在这一过程中,企业也面临着诸多挑战,如研发能力的提升、技术资料管理的复杂性、以及跨部门协作的困难等。为…

【CPP】插入排序:直接插入排序、希尔排序

目录 1.插入排序1.1直接插入排序简介代码分析 1.2直接插入对比冒泡排序简介代码对比分析(直接插入排序与冒泡的复杂度效率区别) 1.3希尔排序简介代码分析 1.插入排序 基本思想:把一个待排数字按照关键码值插入到一个有序序列中,得到一个新的有序序列。 …

施耐德ATV310变频器参数设置

1、ATV610变频器参数设置请参考下面文章链接: 施耐德ATV610变频器MODBUS通信应用(SMART PLC)-CSDN博客文章浏览阅读131次。提升MODBUS-RTU通信数据刷新速度的常用方法_modbus rtu通讯慢-CSDN博客文章浏览阅读1k次。https://rxxw-control.blog.csdn.net/article/det…

03 Shell编程之循环语句与函数

目录 3.1 for 循环语句 3.1.1 for 语句的结构 3.1.2 for 语句应用示例 1. 根据姓名列表批量添加用户 2. 根据IP地址列表检查主机状态 3.2 使用while循环语句 3.2.1 while语句的结构 3.2.2 while语句应用示例 1. 批量添加规律编号的用户 2. 猜价格游戏 3.3 until 循环语句 3.…

IDEA集成Docker实现快捷部署

本文已收录于专栏 《运维》 目录 背景介绍优势特点操作步骤一、修改Docker配置二、配置Docker插件三、编写Maven插件四、构建Docker镜像五、创建Docker容器 总结提升 背景介绍 在我们手动通过Docker部署项目的时候,都是通过把打包好的jar包放到服务器上并且在服务器…
最新文章