Linux运行脚本报错

Linux运行脚本报错:

badinterpreter:Nosuchfileordirectory

但脚本是存在的

是不是在windows下编写的脚本,然后在上传到linux服务器.

原因:在DOS/windows里,文本文件的换行符为rn,而在nix系统里则为n,所以DOS/Windows里编辑过的文本文件到了nix里,每一行都多了个^M。

解决:1)重新在linux下编写脚本;2)vi:%s/r//g:%s/^M//g(^M输入用Ctrl+v,Ctrl+m)附:sh-x脚本文件名,可以单步执行并回显结果,有助于排查复杂脚本问题

把脚本贴出来哈,看第一行开头为#!

  • 建议你看下这篇博客👉 :运维基本功(二):Linux基本命令
  • 除此之外, 这篇博客: Linux重启的执行脚本中的 Linux重启的执行脚本 部分也许能够解决你的问题, 你可以仔细阅读以下内容或跳转源博客中阅读:
    1. 准备好你要执行的脚本start.sh,例:

      #!/bin/bash
      DIR=/home
      echo "dididi..." > $DIR/files.txt
      

      注意:记得给文件添加执行权限

      chmod +x start.sh
      
    2. 在重启启动文件/etc/rc.local中加入你要启动文件的绝对路径
      – 进入文件命令,然后添加执行脚本的绝对路径

      vim /etc/rc.local 
      

      在这里插入图片描述

    3. 这时让Linux重启时执行相应脚本的工作已完成,可以直接重启测试。但可能有些小伙伴重启之后发现脚本并没有执行,这就有可能是rc.local文件没有执行权限。

    4.先查看/etc/rc.local的执行权限 ls -l /etc/rc.local
    在这里插入图片描述
    5. 再查看/etc/rc.d/rc.local的执行权限 ls -l /etc/rc.d/rc.local在这里插入图片描述
    6. 给文件添加执行权限

    chmod +x /etc/rc.d/rc.local
    

    7 这时再次重启就执行脚本了

    Linux重启不执行rc.local是引用了作者: 码农有道 文章。

  • 以下回答由chatgpt基于相关博客总结生成:

    根据参考资料0和1,可知当文本文件具有可执行属性时,需要选择一个程序来解释执行脚本中的文本行。因此,运行脚本时需要注意选择正确的程序进行解释执行。如果确认脚本文件存在且代码编写正确,那么问题可能是由于缺少可执行属性或者选择了错误的程序进行解释执行导致的。具体解决步骤如下:

    1. 确认脚本文件是否有可执行属性

    可执行属性可以使用chmod命令添加。例如,如果脚本文件名为test.sh,可以使用以下命令添加可执行属性:

    chmod +x test.sh
    
    1. 选择正确的程序进行解释执行

    根据脚本文件的类型和内容选择合适的程序进行解释执行。例如,如果脚本文件为Bash脚本,则应该使用Bash解释器执行。可以在脚本文件的第一行添加注释来指定使用哪个解释器。例如,如果要使用Bash解释器执行脚本文件,可以在脚本文件的第一行添加以下注释:

    1
    #!/usr/bin/env bash
    

    其中/usr/bin/env是通用解释器,它会在系统的PATH环境变量中查找指定的解释器。在本例中,会查找Bash解释器并使用它来执行脚本。

    1. 确认程序是否存在

    如果选择了正确的程序进行解释执行,那么可能是因为该程序没有安装或者没有在系统的PATH环境变量中。可以使用which命令来确认程序是否存在。例如,如果要确认Bash解释器是否存在,可以使用以下命令:

    which bash
    

    如果该命令没有输出任何内容,则表示Bash解释器没有安装或者没有在系统的PATH环境变量中。需要先安装该程序或者将其添加到PATH环境变量中。

    1. 确认脚本文件是否存在

    如果以上步骤都没有解决问题,则可能是因为脚本文件不存在或者文件名错误。可以使用ls命令确认脚本文件是否存在,并且文件名是否正确。

    如果以上步骤都不能解决问题,那么可能是由于其他原因引起的,需要进一步排查。