shell脚本中执行时提示“没有那个文件或目录”的解决办法

 更新时间:2014年04月08日 10:03:34   作者:  
故障现象:在终端直接cd /var正常,在shell脚本中执行则报错。原因是脚本是在windows平台下写的,换行符与linux不同,造成脚本不能正确执行

出现bad interpreter:No such file or directory的原因,是文件格式的问题。这个文件是在Windows下编写的。换行的方式与Unix不一样,但是在vim下面如果不Set一下又完全看不出来。

问题分析:
1、将windows 下编写好的SHELL文件,传到linux下执行,提示出错。
2、出错信息:bad interpreter: 没有那个文件或目录。

问题原因:
因为操作系统是windows,在windows下编辑的脚本,所以有可能有不可见字符。脚本文件是DOS格式的
即每一行的行尾以\r\n来标识, 其ASCII码分别是0x0D, 0x0A.

解决方法:
可以有很多种办法看这个文件是DOS格式的还是UNIX格式的, 还是MAC格式的
(1) vim filename
然后用命令 :set ff
可看到dos或unix的字样,如果的确是dos格式的, 那么用set ff=unix把它强制为unix格式的,,然后存盘退出后就可运行。
转换不同平台的文本文件格式可以用
1. unix2dos或dos2unix这两个小程序来做. 很简单. 在djgpp中这两个程序的名字叫dtou和utod, u代表unix, d代表dos
2. 也可以用sed 这样的工具来做:

复制代码 代码如下:
sed ‘s/^M//' filename > tmp_filename
mv -f tmp_filename filename

特别说明:^M并不是按键shift + 6产生的^和字母M, 它是一个字符, 其ASCII是0x0D, 生成它的办法是先按CTRL+V, 然后再回车(或CTRL+M)

另外, 当SHELL程序报告command not found时, 总是去检查一下你的PATH里面有没有程序要用到的每一个命令(没指定绝对路径的那种). 你这么小的程序, 可以一行一行核对。

附:少写一个/引发的没有那个文件或目录问题

   今天在翻看以前写的简单的shell脚本时,发现一个问题:

   当./运行时总是提示:  (bash: ./hello.sh: bin/bash: 坏的解释器: 没有那个文件或目录),但是当用sh运行时正确.

   原来的脚本:

   (试试看你能否一眼看出错误)

复制代码 代码如下:

   #!bin/bash

   echo "Hello Linux!"


 

   后来几番检查发现自己写的丢了一些东西.

   应该把第一行改成  #!/bin/bash ,少写了一个/

   唉,很简单的问题,自己以前没有发现还有这样的错误! shell脚本的确好用,可唯一难的就是格式要求太高!

相关文章

  • 详解Shell编程之变量数值计算(一)

    详解Shell编程之变量数值计算(一)

    本篇文章主要介绍了详解Shell编程之变量数值计算,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02
  • Vim中列出TODO与FIXME等备注的方法

    Vim中列出TODO与FIXME等备注的方法

    很多代码编辑器,在注释里写上 XXX TODO FIXME NOTE 关键字的话,这几个关键字是会被高亮显示的。但很多人不知道,下面这篇文章主要介绍了Vim中列出TODO与FIXME等备注的方法,文中通过示例代码介绍的非常详细,需要的朋友们下面跟着小编一起来学习学习吧。
    2017-06-06
  • Linux通过命令压缩与解压缩的方法| tar, tar.gz, tar.bz2

    Linux通过命令压缩与解压缩的方法| tar, tar.gz, tar.bz2

    这篇文章主要介绍了Linux通过命令压缩与解压缩的方法| tar, tar.gz, tar.bz2,内容囊括了打包、压缩、解压缩的基本概念,最后通过实例讲解,非常不错,具有参考借鉴价值,需要的的朋友参考下吧
    2017-04-04
  • shell脚本中28个特殊字符的作用简明总结

    shell脚本中28个特殊字符的作用简明总结

    这篇文章主要介绍了shell脚本中28个特殊字符的作用简明总结,需要的朋友可以参考下
    2014-04-04
  • ubuntu sublime中文输入问题解决办法

    ubuntu sublime中文输入问题解决办法

    这篇文章主要介绍了ubuntu sublime中文输入问题解决办法的相关资料,需要的朋友可以参考下
    2017-05-05
  • linux定时任务出现command not found解决办法

    linux定时任务出现command not found解决办法

    这篇文章主要介绍了 linux定时任务出现command not found解决办法的相关资料,需要的朋友可以参考下
    2017-05-05
  • 对Shell 脚本加密的方法

    对Shell 脚本加密的方法

    shc是一个加密shell脚本的工具.它的作用是把shell脚本转换为一个可执行的二进制文件
    2013-01-01
  • Shell实现程序造死循环的几种方法示例

    Shell实现程序造死循环的几种方法示例

    在linux下编程的程序猿都知道shell脚本,就算你不怎么熟悉,也应该听过的吧!那在shell脚本中的死循环该怎么写呢?下面这篇文章就来给大家介绍了关于Shell如何实现让程序造死循环的几种方法,需要的朋友可以参考下。
    2017-08-08
  • @echo off的作用详解

    @echo off的作用详解

    本文主要介绍了@echo off的作用详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-05-05
  • shell的条件测试,变量测试,表达式中的0和1,数值判断,字符串判断

    shell的条件测试,变量测试,表达式中的0和1,数值判断,字符串判断

    本文主要介绍了shell的条件测试,变量测试,表达式中的0和1,数值判断,字符串判断,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-01-01

最新评论