常识指南
柔彩主题三 · 更轻盈的阅读体验

Linux脚本执行失败?这些常见问题你可能正遇到

发布时间:2026-01-15 07:31:01 阅读:161 次

你在Linux系统里写了个脚本,信心满满地运行,结果终端却报错:权限被拒绝、命令找不到,或者干脆一点反应都没有。别急,这种情况太常见了,很多用户都卡在“脚本执行”这一步。

脚本没有执行权限

最常遇到的问题就是权限不足。哪怕脚本内容写得再完美,如果系统不允许它运行,那就什么都白搭。新建的脚本默认是不具备执行权限的。

比如你写了个叫 backup.sh 的脚本,双击打不开,命令行输入 ./backup.sh 却提示 Permission denied,这时候就得加权限:

chmod +x backup.sh

加上之后再运行,就能正常执行了。

脚本首行没指定解释器

Linux不知道该用什么程序来读你的脚本,除非你明确告诉它。脚本第一行应该写上 shebang(#!),指明解释器路径。

比如bash脚本,开头应该是:

#!/bin/bash

如果你用的是Python写的脚本,那就写:

#!/usr/bin/env python3

少了这一行,即使有权限,系统也可能不知道怎么处理这个文件。

路径问题导致脚本找不到

很多人习惯把脚本放在当前目录下,然后直接输入脚本名运行,比如 backup.sh,但系统并不会自动搜索当前目录。必须带上 ./ 才能执行:

./backup.sh

直接输 backup.sh,系统会去 PATH 环境变量里的目录找,显然你的脚本不在那些位置,自然就报 “command not found” 了。

脚本里调用了不存在的命令

有时候脚本跑着跑着突然中断,提示某个命令找不到。比如你在脚本里写了 service nginx restart,但某些轻量发行版(如Alpine)用的是 openrc,根本没装 service 命令。

还有可能是环境变量差异。你在终端手动执行时,PATH 包含 /usr/local/bin,但脚本运行时可能不包含。可以试试在脚本里输出环境:

echo $PATH

看看关键路径是否缺失。

换行符格式错误

如果你是在Windows上编辑脚本,再传到Linux运行,很可能遇到这个问题。Windows用 \r\n 换行,Linux只认 \n。多出来的 \r 会被当成命令的一部分,导致找不到命令。

解决方法是用 dos2unix 工具转换:

dos2unix your_script.sh

或者用 sed 手动替换:

sed -i 's/\r$//' your_script.sh

脚本语法有错误

写脚本时少了个引号、括号没闭合,或者 if 语句忘了 fi,都会导致执行失败。建议先用 bash -n 检查语法:

bash -n your_script.sh

这不会运行脚本,但能发现语法问题。也可以加上 -x 参数调试执行过程:

bash -x your_script.sh

看到每一步是怎么展开的,问题更容易定位。

脚本执行看似简单,其实藏着不少细节。多数故障都不是系统问题,而是权限、路径、格式这些小地方出了差错。动手前多看一眼,能省下大把排查时间。