linux下执行脚本,提示Command not found解决办法

本文介绍了解决Linux环境下执行.sh脚本时出现的错误:bin/sh^M: bad interpreter: No such file or directory及command not found的问题。主要原因是脚本在Windows下编写导致的编码差异,通过修改文件格式为Unix格式即可解决。

遇上了这个坑,搞了好久没搞定,参考了前辈的文章,终于搞好了,分享如下

原文地址:http://www.cnblogs.com/GordonWorld/archive/2012/03/19/2406225.html

Linux下执行.sh脚本错误:bin/sh^M: bad interpreter: No such file or directory

      原因是.sh脚本在windows系统下用记事本文件编写的。不同系统的编码格式引起的。

转行文件的编码格式:

1、确保用户对文件有读写及执行权限

     oracle@linux-106:~/RMAN/bin> chmod a+x test.sh

2、然后修改文件格式

   (1)使用vi工具

     oracle@linux-106:~/RMAN/bin> vi test.sh

    (2)利用如下命令查看文件格式 
     :set ff 或 :set fileformat 
     可以看到如下信息 
     fileformat=dos 或 fileformat=unix 
     (3) 利用如下命令修改文件格式 
     :set ff=unix 或 :set fileformat=unix 
     :wq (存盘退出)

3、最后再执行

    oracle@linux-106:~/RMAN/bin> ./test.sh

Linux下执行.sh脚本错误:command not found

      command not found这个问题一般都是像我这样的新手才会犯的,所以刚学linux的童鞋们遇到这个问题可以看看我的解释,可能会给你帮助。

      其实这个问题可能是很多原因引起的,今天我碰到原因很值得关注,一般我们在写java代码的时候定义变量都喜欢这样写” String  test  =  “ ”; ”。今天我写了一个shell脚本,在脚本里定义了一个变量,(“host = “””),结果执行的时候出现了这个command not found。我是冥思苦想啊,怎么想也想不出为什么,后来我终于发现问题的所在了就是一个空格在作怪,其实在定义shell脚本的变量时在变量名和等号之间是不允许有空格的,而我写的是test和=之间有空格,所以系统默认为,test是一个命令,所以系统找不到这个命令。切记切记,小问题有时候也会让你停滞不前的。

Linux系统中,如果在运行脚本提示 `echo: command not found`,这通常不是因为 `echo` 命令本身缺失,而是脚本执行环境或脚本本身的编写方式存在问题。以下是一些可能的原因及对应的解决方法: ### 1. 脚本使用了错误的解释器 确保脚本的第一行指定了正确的解释器,例如 `/bin/sh` 或 `/bin/bash`。如果脚本使用了其他解释器,如 `#!/usr/bin/env python`,但脚本内容实际上是 shell 命令,这会导致 `echo` 等命令无法识别。确保脚本的第一行如下所示: ```bash #!/bin/bash ``` 如果脚本使用的是 `/bin/sh`,但系统中 `sh` 指向的是其他 shell(如 `dash`),也可能导致兼容性问题。可以通过以下命令检查 `sh` 的实际链接: ```bash ls -l /bin/sh ``` 如果需要,可以将其更改为指向 `bash`: ```bash sudo ln -sf /bin/bash /bin/sh ``` ### 2. 脚本文件的编码或格式问题 如果脚本文件的编码或格式不正确,例如使用了 Windows 风格的换行符(`\r\n`),可能会导致 shell 解释器无法正确解析命令。可以使用 `dos2unix` 工具将文件转换为 Unix 风格的换行符: ```bash sudo apt-get install dos2unix dos2unix your_script.sh ``` ### 3. 脚本文件的执行权限不足 确保脚本文件具有执行权限。可以使用 `chmod` 命令为其添加执行权限: ```bash chmod +x your_script.sh ``` 然后尝试运行脚本: ```bash ./your_script.sh ``` ### 4. 环境变量问题 在某些情况下,脚本可能在非交互式 shell 中运行,导致环境变量未正确设置。可以在脚本的开头显式设置 `PATH`,以确保命令可以被正确找到: ```bash #!/bin/bash export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin echo "Hello, World!" ``` ### 5. 使用 `source` 或 `.` 命令执行脚本 如果不想修改脚本执行权限,可以使用 `source` 或 `.` 命令来运行脚本: ```bash source your_script.sh ``` 或者 ```bash . your_script.sh ``` ### 6. 检查脚本中的特殊字符或语法错误 如果脚本中包含了 shell 无法识别的特殊字符或语法错误,也可能导致 `echo` 命令无法执行。可以使用 `set -x` 或 `bash -x` 来调试脚本,查看具体的执行过程: ```bash bash -x your_script.sh ``` ### 7. 系统环境问题 如果系统环境异常,例如 `/bin` 或 `/usr/bin` 目录被误删或损坏,也可能导致 `echo` 等基本命令缺失。可以通过重新安装 `coreutils` 包来修复: ```bash sudo apt-get update sudo apt-get install --reinstall coreutils ``` ### 总结 通过检查脚本的解释器、文件格式、执行权限、环境变量以及系统环境,通常可以解决 `echo: command not found` 的问题。如果问题仍然存在,建议逐步调试脚本,确保每一步都没有语法或逻辑错误。
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值