最近用Nodepad++写Shell脚本进行参数动态传递时,发现有时候参数携带了
\r
换行符,编辑器里也是Shell脚本的语言。本来一看就知道是换行符的问题,偏偏有的脚本不带
\r
符号,有的又带,真的迷!
-
Unix体系里,每行结尾只有"<换行>”,即"
\n
";
-
Windows体系里面,每行结尾是"<换行><回 车>”,即"
\n\r
”。
所以当从Windows上把脚本放入Linux上后,会把"
\n\r
”一起带入
allSyncTask.sh:脚本名称,自定义
1.使用命令:
dos2unix allSyncTask.sh
找不到dos2unix
命令时,安装dos2unix
:
yum install dos2unix
yum install unix2dos
2.去掉"\r
"命令:(切记不要使用两个",不然所有带r字母的都会被替换掉)
sed -i "s/\r//" allSyncTask.sh
最近用Nodepad++写Shell脚本进行参数动态传递时,发现有时候参数携带了\r换行符,编辑器里也是Shell脚本的语言。本来一看就知道是换行符的问题,偏偏有的脚本不带\r符号,有的又带,真的迷!问题原因:Unix体系里,每行结尾只有"<换行>”,即"\n";Windows体系里面,每行结尾是"<换行><回 车>”,即"\n\r”。所以当从Windows上把脚本放入Linux上后,会把"\n\r”一起带入解决方法:博主使用第二种方法解决了问题,第一
shell脚本成分
开头和注释: shell脚本的开头,用来解释shell程序,包括:#!/bin/bash、#!/bin/csh、#!/bin/tcsh、#!/bin/pdksh,一般用#!/bin/bash。。
shell脚本中的注释,以#开头的句子表示注释。
变量: 变量的赋值和引用 在shell编程中变量没有类型,简称弱类型编程语言,不需要声明,在引用这个变量时会创建它(在变量名前加$符号引用变量的值)。在定义变量时,若String中包含空格、制表符、换行符,需用单(双)引号,双引号内允许变量替换,而单引号内就不可以。
shell变量的作用域 可以用export内置命令将局部变量设置为全局变量。
位置变量 用于向shell脚本传递信息。参数相关数目传入脚本,此数目任意多,但只有前9个可以被访问,使用shift命令可以改变限制。其中,$0:脚本名字。
特定变量参数 $#:传递到脚本的参数个数;$*:以一个单字符串显示所有项脚本传递的参数。与位置变量不通,此选项参数可超过9个;$$:脚本运行的当前进程ID号;&!:后台运行的最后一个进程的进程ID号;$@:与$#相同,但是使用时加引号,并在引号中返回每个参数;$-:显示shell使用的当前选项,与set命令功能相同;$?:显示最后命令的退出状态(0表示没有错误,其他任何值表明有错误。)。
变量的规则 1.变量与变量内容以一个等号『=』来连结,如下所示『myname=VBird』
2.等号两边不能直接接空格符,如下所示为错误:『myname = VBird』或『myname=VBird Tsai』
3.变量名称只能是英文字母与数字,但是开头字符不能是数字,如下为错误:『2myname=VBird』
"4.变量内容若有空格符可使用双引号『""』或单引号『'』将变量内容结合起来,但
双引号内的特殊字符如 $ 等,可以保有原本的特性,如下所示:『var=""lang is $LANG""』则『echo $var』可得『lang is en_US』
单引号内的特殊字符则仅为一般字符 (纯文本),如下所示:『var='lang is $LANG'』则『echo $var』可得『lang is $LANG』"
5.可用跳脱字符『 \ 』将特殊符号(如 [Enter], $, \, 空格符, '等)变成一般字符;
"6.在一串命令中,还需要藉由其他的命令提供的信息,可以使用反单引号『`命令`』或 『$(命令)』
特别注意:那个 ` 是键盘上方的数字键 1 左边那个按键,而不是单引号! 例如想要取得核心版本的配置:『version=$(uname -r)』再『echo $version』可得『2.6.18-128.el5』"
"7.若该变量为扩增变量内容时,则可用 ""$变量名称"" 或 ${变量} 累加内容,如下所示:
『PATH=""$PATH"":/home/bin』"
8.若该变量需要在其他子程序运行,则需要以 export 来使变量变成环境变量:『export PATH』
9.通常大写字符为系统默认变量,自行配置变量可以使用小写字符,方便判断 (纯粹依照使用者兴趣与嗜好) ;
10.取消变量的方法为使用 unset :『unset 变量名称』例如取消 myname 的配置:『unset myname』
使用Notepad++工具
1、利用notepad++工具打开脚本文件
2、在菜单栏找到“显示符号”下的“显示所有字符”,然后就可以看到换行符了,Linux下换行符为\n,而Windows下为\r\n,此时可看到为两个字符
3、继续在菜单栏找到“编辑”选项下的“文档格式转换”,点击“转换为UNIX格式”,此时发现换行符只有一个字符了
4、问题解决啦,测试脚本,运行通过
获取docker容器里所有的以config结尾的文件,并批量保存到本地
出现问题
cp: cannot stat ‘A.config\r’: No such file or directory
然后手动去执行了下发现是正常的,那么究竟是什么原因呢
find命令在查找出来的参数,默认是单独一行,通过观察文件末尾的**\r**就能发现,那么我们需要在传递参数时,将\r置空,使他与后面的目录路径是一行命令
config_file=$(echo $file| sed 's/\r//')
Shell 是一个用 C 语言编写的程序,它是用户使用 Linux 的桥梁。Shell 既是一种命令语言,又是一种程序设计语言。
Shell 是指一种应用程序,这个应用程序提供了一个界面,用户通过这个界面访问操作系统内核的服务。
Ken Thompson 的 sh 是第一种 Unix Shell,Windows Explorer 是一个典型的图形界面 Shell。
She...
### 回答1:
要在shell脚本中替换行末的字符,您可以使用sed命令。以下是一个使用sed将Windows风格的换行符(\r\n)替换为Unix风格的换行符(\n)的示例:
```bash
sed -i 's/\r$//' your_file.sh
在这个命令中,`-i`选项表示直接在原始文件中进行修改,`s/`表示要替换字符串,`\r$`表示要匹配行末的回车符,`//`表示将其替换为空字符串。最后,`your_file.sh`是要修改的文件名。
如果您希望将其他字符替换为换行符,请将命令中的`\r`替换为您想要替换的字符。
### 回答2:
Shell脚本是一种用于自动化任务和批量处理的脚本语言,它可以帮助我们简化日常操作和提高工作效率。但是,在编写Shell脚本时,经常会涉及到换行符的使用问题。
在Shell脚本中,换行符主要有两种:Unix风格和Windows风格。Unix风格的换行符是“\n”,表示换行;Windows风格的换行符是“\r\n”,表示回车和换行。这两种换行符的使用可能会对Shell脚本的执行结果产生不同的影响。
Unix风格的换行符在Linux和Unix系统中被广泛使用,而Windows风格的换行符则主要用于Windows系统。如果在Windows系统中编写Shell脚本并使用Unix风格的换行符,则在执行脚本时可能会出现语法错误或者无法识别换行符的情况。
为了解决这个问题,我们可以通过在Shell脚本中添加特殊的注释来指定换行符的类型。例如,使用“#!/bin/bash -xv”指定Unix风格的换行符,使用“#!/bin/bash -xv\r\n”指定Windows风格的换行符。
另外,在Shell脚本中给某个变量或命令的输出添加换行符也是常见的操作。我们可以使用“echo -e”指令来实现添加换行符的功能。例如,“echo -e 'hello\nworld'”会输出“hello”和“world”两行文字。
总之,在Shell脚本中正确使用换行符可以帮助我们避免语法错误和不必要的麻烦,在实际编写和执行过程中需要谨慎处理。
### 回答3:
在shell脚本中,换行符扮演着非常重要的角色。换行符可以让我们将一行非常长的代码拆分成多行,使得代码更加易读,同时也方便我们排版和注释。
在shell脚本中,可以使用两种方式来表示换行符:\n和$。
1. \n表示换行符
\n是一种转义字符,表示换行符。当我们在代码中使用\n时,shell会将其认为是一个换行符。例如,下面的代码:
```shell
echo -e "hello\nworld"
输出结果如下:
hello
world
其中,-e选项表示使用转义字符。因为echo命令默认输出不会解析转义字符。
2. $表示换行符
另外一种表示换行符的方式是使用$。在代码中使用$,可以将一行代码拆分成多行,而不会影响代码的执行。例如,下面的代码:
```shell
echo "hello"\
"world"
输出结果和上面的例子是一样的:
hello
world
当我们在使用$时,需要注意以下几点:
- $后面必须紧跟一个换行符。
- 如果在$后面没有换行符,shell会将其认为是一个普通的字符。
- $后面的换行符也会被shell忽略掉,不会输出到屏幕上。
总之,在shell脚本中,换行符是非常重要的一种符号。它可以让我们写出更加优美和易读的代码。当我们在编写shell脚本时,需要善于运用换行符,将代码拆分成多行,提高代码的可读性和可维护性。
Docker | 安装RabbitMQ详细教程,以及安装遇到的问题:Stats in management UI are disabled on this node
qq_44773129:
Redis - increment 递增方法 | 处理防重复和并发问题
weixin_48856914: