前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >Windows DOS格式脚本和Linux Unix格式脚本差异导致的跨平台问题

Windows DOS格式脚本和Linux Unix格式脚本差异导致的跨平台问题

原创
作者头像
Power
发布2025-02-28 15:43:32
发布2025-02-28 15:43:32
5300
代码可运行
举报
运行总次数:0
代码可运行

一、DOS格式和Unix格式介绍

DOS格式和Unix格式是两种不同的文本文件格式,它们在行结束符(line ending)上有显著的区别。这些差异源于不同的操作系统历史和设计哲学。

1.1 DOS格式(也称为Windows格式)

DOS格式文本文件使用特定的字符序列来表示行结束。在DOS、Windows以及许多其他早期的操作系统(如CP/M)中,行结束符由两个字符组成:回车(Carriage Return, CR)和换行(Line Feed, LF)。在ASCII编码中,回车对应的字符是\r(十进制值为13),换行对应的字符是\n(十进制值为10)。因此,DOS格式的行结束符通常表示为\r\n。

特点:

  • 行结束符是\r\n。
  • 在Windows系统中广泛使用,包括在Windows记事本等文本编辑器中。
1.2 Unix格式(也称为Linux格式、Mac格式(较新的Mac OS))

Unix格式的文本文件使用单一的换行(Line Feed, LF)字符来表示行结束。这种格式更为简洁,是Unix、Linux以及较新的Mac OS版本(从Mac OS X开始)的标准行结束方式。

特点:

  • 行结束符是\n。
  • 在Unix、Linux、Mac OS X及以后版本的Mac操作系统中使用。

二、问题复现

2.1 报错场景1

Windows下编辑的脚本,上传Linux环境执行。

代码语言:javascript
代码运行次数:0
复制
[root@test ~]# ./cleanup-backup.sh 
-bash: ./cleanup-backup.sh: /bin/bash^M: bad interpreter: No such file or directory
2.2 报错场景2
代码语言:javascript
代码运行次数:0
复制
[root@test ~]# ./myScript.sh 
./myScript.sh: line 41: syntax error: unexpected end of file

三、解决方案

3.1 转换方式1:在Linux中,用vim打开脚本
代码语言:javascript
代码运行次数:0
复制
[root@test ~]# vim cleanup-backup.sh 

(1)用 :set ff 可查看文件格式

image.png
image.png

回车可以看到

image.png
image.png

(2)用 :set ff=unix 可设置文件格式为unix

image.png
image.png

回车可以看到

image.png
image.png
3.2 转换方式2:在Linux中,用dos2unix工具转换
代码语言:javascript
代码运行次数:0
复制
[root@test ~]# yum -y install dos2unix
[root@test ~]# dos2unix cleanup-backup.sh
dos2unix: converting file cleanup-backup.sh to Unix format ...

四、快速检查脚本是否有语法错误

代码语言:javascript
代码运行次数:0
复制
# 命令有输出则是有语法错误
[root@test ~]# sh -n myScript.sh

注:用"-n" 选项只会读取shell脚本,用于测试shell脚本是否存在语法错误,但不会实际执行脚本。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、DOS格式和Unix格式介绍
    • 1.1 DOS格式(也称为Windows格式)
    • 1.2 Unix格式(也称为Linux格式、Mac格式(较新的Mac OS))
  • 二、问题复现
    • 2.1 报错场景1
    • 2.2 报错场景2
  • 三、解决方案
    • 3.1 转换方式1:在Linux中,用vim打开脚本
    • 3.2 转换方式2:在Linux中,用dos2unix工具转换
  • 四、快速检查脚本是否有语法错误
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档