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

news2024/12/24 21:04:36

👨‍🎓博主简介

  🏅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.coloradmin.cn/o/1860391.html

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

相关文章

mprpc框架基础类的设计

目录 1.回顾 2.主函数书写 3.框架设计 3.1 mprpcapplication.h 3.2 rpcprovider.h 3.3 mprpcapplication.cc 3.4 mprpcprovider.cc 1.回顾 mprpc框架怎么用? 在上一节,我们完成了如何把本地服务发布成RPC服务。 我们打开example下callee下的users…

制造业ERP五大生产模式详解!

制造业面临着从成本控制、生产效率到供应链管理的挑战,每一个环节都需要精细化的管理和高效的协同。而ERP系统,作为一种集信息技术与管理思想于一体的管理工具,正逐渐成为制造业转型升级的关键。那么,通过本文你将会了解到&#x…

某某商场对账返款单,table

好久不写原生html&#xff0c;今天写了个&#xff0c;快忘完了 。。。 Double Header Table ***商场统一收银结算商户对账返款单 商场&#xff08;盖章有效&#xff09; 铺位名称&#xff1a; 铺位号&#xff1a; 制单人&#xff1a; 制单日期&#xff1a; </tr><tr&…

智慧社区:居民幸福生活的保底线,价值非常大。

大屏应该能够显示社区内的关键数据&#xff0c;如人流量、车辆数量、垃圾分类情况等。这些数据可以通过图表、数字、地图等形式展示&#xff0c;以便居民和管理者能够直观地了解社区的情况。 智慧社区可视化大屏成为一个有益于社区管理和居民生活的工具&#xff0c;提供实时、准…

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

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

Casaos之qittorrent设置(没有账号密码)

点击安装只有没有账号密码&#xff0c;只能从运行日志中找密码&#xff1a; # 查看container docker ps -a # 查看container日志 docker logs ae15cb90afbd 进入系统 最下方&#xff0c;保存。

solidity智能合约如何实现跨合约调用函数

背景 比如现在有一个需求、我需要通过外部合约获取BRC20 token的总交易量。那么我需要在brc20的转账函数里面做一些调整&#xff0c;主要是两个函数内统计转移量。然后再提供外部获取函数。 /*** dev Sets amount as the allowance of spender over the callers tokens.** Ret…

从SRE视角透视DevOps的构建精髓

SRE 侧重系统稳定性&#xff0c;DevOps 强调开发运维协作。SRE 实践助力DevOps&#xff0c;提升系统稳定性与团队协作效率。 SRE 运用软件工程的原理&#xff0c;将系统管理员的手工任务自动化&#xff0c;负责运维由系统组件构成的服务&#xff0c;确保服务稳定运行。SRE职责涵…

全国计算机等级考试WPS如何报名

全国计算机等级考试WPS如何报名&#xff1f; 注册并登录 全国计算机等级考试官网选择 考试服务-在线报名选择报考省份-开始报名

现成!小众且创新idea! 小样本+故障识别!1DGAN-SVM 批量生成样本-故障识别一体化程序!MATLAB程序,直接运行!

推荐平台&#xff1a;Matlab2022版及以上 在机器学习、深度学习领域&#xff0c;数据的多样性和数量直接影响模型的性能。生成对抗算法GAN&#xff08;Generative Adversarial Network&#xff09;通过对抗过程训练&#xff0c;能够生成高度逼真的数据样本&#xff0c;增加训练…

Verifieable FHE(VFHE):使用Plonky2来证明Zama TFHE的“Bootstrapping的正确执行”

1. 引言 Zama团队2024年论文Towards Verifiable FHE in Practice: Proving Correct Execution of TFHE’s Bootstrapping using plonky2 中&#xff1a; 首次阐述了&#xff0c;在实践中&#xff0c;将整个FHE bootstrapping操作&#xff0c;使用SNARK来证明。在其相应的http…

买卖的价差与速率之间建立的关系

import numpy as np import matplotlib.pyplot as plt# 参数设置 A 100 delta_ba np.array([1, 5, 10]) # 时间差&#xff0c;以秒为单位 k_values [0.05, 0.1, 0.01] # 不同的k值# 计算不同k值下的λb,a def calculate_lambda(A, k, delta):return A * np.exp(-k * delta…

NSSCTF-Web题目16

目录 [GDOUCTF 2023]受不了一点 1、题目 2、知识点 3、思路 [UUCTF 2022 新生赛]ez_upload 1、题目 2、知识点 3、思路 [GDOUCTF 2023]受不了一点 1、题目 2、知识点 php代码审计、数组绕过、弱比较绕过 3、思路 打开题目&#xff0c;出现代码&#xff0c;我们进行代…

AIGC已经火了好几年,现在学还抓得住这个风口吗?

简介 进入人工智能&#xff08;AI&#xff09;与游戏行业整合&#xff08;AIGC&#xff09;领域需要考虑当前的市场需求和行业发展阶段&#xff1a; 1、市场需求&#xff1a;目前&#xff0c;人工智能和游戏行业都在不断发展壮大&#xff0c;并且两者的结合也逐渐成为一个热门领…

当前周周报自动生成工具

周报自动生成工具使用指南 功能简介 每次只用在xx周报.xlsx 中进行工作内容的更改&#xff0c;然后写完之后点一下run\_clear\_formulas\_and\_save.bat就能导出一份当前周周报&#xff0c;不用进行每周都自己新建一份然后把所有需要改时间的地方都改一遍这种重复劳动。 自动…

C++三大特性之一:多态

一、多态 1、通过指针创建对象&#xff08;动态分配&#xff09; #include <iostream> using namespace std;class Base { public:virtual void show() {cout << "Base class show" << endl;} };class Derived : public Base { public:void show…

Android 13 修改系统导航默认值

Android 13 原生系统上&#xff0c;设置-系统-手势-系统导航 菜单&#xff0c;可以修改系统导航方式。 手势导航&#xff1a; 三按钮导航&#xff1a; adb 获取当前导航方式&#xff0c;手势导航 是 2 &#xff0c;三按钮导航是 0 。 settings get secure navigation_mode 修…

游戏AI的创造思路-技术基础-深度学习(2)

感觉坑越挖越大&#xff0c;慢慢填~~~~ 继续上篇进行填坑&#xff0c;这一篇我们介绍下循环神经网络 目录 3.2. 循环神经网络&#xff08;RNN&#xff09; 3.2.1. 算法形成过程 3.2.2. 运行原理 3.2.3. RNN有哪些优缺点 3.2.4. RNN参数 3.2.5. 如何选择RNN模型参数 3.2…

odoo17 tree视图添加按钮

需求描述 点击下图中tree视图上的同步退货单按钮&#xff0c;弹出相应的form视图进行退货单同步&#xff0c;然后点击同步按钮调用后端python代码处理。 实现步骤 主要文件目录结构 js文件的创建 /** odoo-module **/ import { registry } from "web/core/registry&quo…

芒果YOLOv10改进66:特征融合Neck篇之原创 HFAMPAN 结构:信息高阶特征对齐融合和注入,全局融合多级特征,将全局信息注入更高级别

💡本篇内容:YOLOv10 改进原创 HFAMPAN 结构,信息高阶特征对齐融合和注入,全局融合多级特征,将全局信息注入更高级别 💡🚀🚀🚀本博客 改进源代码改进 适用于 YOLOv10 按步骤操作运行改进后的代码即可 💡本文提出改进 原创 方式:二次创新,YOLOv10 专属 论文…