由于换行符导致shell脚本运行报解释器错误 -linux和widows上的shell脚本是有区别的

33 篇文章 0 订阅

linux和widows上的shell脚本是有区别的

如果你发现两个文件的代码一样,或者语法正确,但是一运行就报解释器错误

代码看似一模一样,但实际却不一样
如果将windows编辑过的shell脚本放到Linux中运行,会产生

bash: ./iozone_Test.sh: /bin/sh^M: 解释器错误: 没有那个文件或目录


bash: ./iozone_Test.sh: /bin/sh^M: 解释器错误: 没有那个文件或目录

多了个^M代表换行符  这里有问题

//经过windows编辑后的shell脚本    换行符\r\n
$ od -tx1 -tc iozone_Test.sh   
0000000  23  21  2f  62  69  6e  2f  73  68  0d  0a  63  64  20  2e  0d
          #   !   /   b   i   n   /   s   h  \r  \n   c   d       .  \r
0000020  0a  6d  61  6b  65  20  6c  69  6e  75  78  0d  0a  63  68  6d
         \n   m   a   k   e       l   i   n   u   x  \r  \n   c   h   m
0000040  6f  64  20  2b  78  20  52  75  6e  5f  69  6f  7a  6f  6e  65
          o   d       +   x       R   u   n   _   i   o   z   o   n   e
0000060  2e  73  68  0d  0a  4e  75  6d  3d  24  31  0d  0a  4e  75  6d
          .   s   h  \r  \n   N   u   m   =   $   1  \r  \n   N   u   m
0000100  32  3d  24  32  0d  0a  69  66  20  5b  20  21  24  4e  75  6d
          2   =   $   2  \r  \n   i   f       [       !   $   N   u   m
0000120  20  5d  0d  0a  74  68  65  6e  0d  0a  20  69  66  20  5b  20
              ]  \r  \n   t   h   e   n  \r  \n       i   f       [    
0000140  24  4e  75  6d  20  3e  20  30  20  5d  0d  0a  20  74  68  65
          $   N   u   m       >       0       ]  \r  \n       t   h   e
0000160  6e  0d  0a  65  63  68  6f  20  22  e6  b5  8b  e8  af  95  e5
          n  \r  \n   e   c   h   o       " 346 265 213 350 257 225 345
0000200  bc  80  e5  a7  8b  22  0d  0a  65  63  68  6f  20  22  69  6f
        274 200 345 247 213   "  \r  \n   e   c   h   o       "   i   o
//下面这个是linux下编辑的shell脚本  换行符只是\n

$ od -tx1 -tc Iozone.sh 
0000000  23  21  2f  62  69  6e  2f  73  68  0a  63  64  20  2e  0a  6d
          #   !   /   b   i   n   /   s   h  \n   c   d       .  \n   m
0000020  61  6b  65  20  6c  69  6e  75  78  0a  63  68  6d  6f  64  20
          a   k   e       l   i   n   u   x  \n   c   h   m   o   d    
0000040  2b  78  20  52  75  6e  5f  69  6f  7a  6f  6e  65  2e  73  68
          +   x       R   u   n   _   i   o   z   o   n   e   .   s   h
0000060  0a  4e  75  6d  3d  24  31  0a  4e  75  6d  32  3d  24  32  0a
         \n   N   u   m   =   $   1  \n   N   u   m   2   =   $   2  \n
0000100  69  66  20  5b  20  21  24  4e  75  6d  20  5d  0a  74  68  65
          i   f       [       !   $   N   u   m       ]  \n   t   h   e
0000120  6e  0a  20  69  66  20  5b  20  24  4e  75  6d  20  3e  20  30
          n  \n       i   f       [       $   N   u   m       >       0
0000140  20  5d  0a  20  74  68  65  6e  0a  65  63  68  6f  20  22  e6
              ]  \n       t   h   e   n  \n   e   c   h   o       " 346
0000160  b5  8b  e8  af  95  e5  bc  80  e5  a7  8b  22  0a  65  63  68
        265 213 350 257 225 345 274 200 345 247 213   "  \n   e   c   h
0000200  6f  20  22  69  6f  7a  6f  6e  65  2e  2e  2e  22  0a  53  49
          o       "   i   o   z   o   n   e   .   .   .   "  \n   S   I

我重新再linux创建了个测试shell脚本,将代码复制上来,正常运行

解决方法

(1)dos2unix xxx  xxx为文件名

(2)在VI编辑器中将^M删除:

将VI编辑器切换到命令模式下,输入 :%s/^M//g (注意^M 不是shift ^ +M 而是ctrl+v 加上ctrl+m)  s///g是shell的替换命令

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GLL_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值