1.问题来源
在Windows操作系统下上传的shell脚本可能会出现无法运行的问题,这是因为Windows和Linux等操作系统对于文本文件的编码方式不同所导致的。
2.问题过程
我们先在Windows操作系统下创建一个shell脚本tx1.sh,编码格式为UTF-8,脚本内容为:
echo 10+10
a=20
echo $a
echo $a+30
将文件上传至linux中执行脚本的运行结果:
为什么 echo $a+30 输出的是“+30”?变量a为什么没有被引用?
我们通过file指令查看文件格式:
tx1.sh:这表明该文件是一个文本文件,采用ASCII编码。
主要原因是tx1.sh是我在Windows下编辑然后上传到Linux系统里执行的。.sh文件的格式为dos格式。而Linux只能执行格式为Unix格式的脚本。因为在dos/window下按一次回车键实际上输入的是“回车(CR)”和“换行(LF)”,而Linux/unix下按一次回车键只输入“换行(LF)”,所以修改的sh文件在每行都会多了一个CR,所以Linux下运行时就会报错找不到命令。
3.解决方式
使用dos2unix命令,这个命令可以将DOS格式的文本文件转换成Unix或Linux格式。在终端中输入“dos2unix filename.sh”即可将名为filename.sh的shell脚本转换为Unix或Linux格式。
3.1在Linux中安装dos2unix
要在Linux系统中使用dos2unix命令,就需要安装dos2unix,可以按照以下步骤进行操作:
- 打开终端程序,输入以下命令并按下回车键:
sudo yum install dos2unix
- 等待命令行工具下载和安装dos2unix软件包。
安装完成后,你就可以使用dos2unix命令将文本文件从DOS格式转换成Unix或Linux格式。
3.2验证结果
在终端中输入“dos2unix filename.sh”即可将名为filename.sh的shell脚本转换为Unix或Linux格式。
如转换示例中的tx1.sh,操作如下所示: