服务器运维 Shell 脚本报错是一个非常常见的问题,原因可能五花八门。下面我按最常见的原因分类给你讲清楚,并给出排查方法,你可以对照看看是哪一种。
#!/bin/bash
如果写成:
#! /bin/sh # 但脚本用了 bash 专属语法
或文件根本没指定解释器,就会报奇怪的语法错误。
✅ 排查:
which bash
head -1 your_script.sh
在 Windows 编辑的脚本传到 Linux 后:
\r\n
会导致:
command not found
syntax error near unexpected token `$'\r'`
✅ 解决:
sed -i 's/\r$//' script.sh
# 或
dos2unix script.sh
bash: ./script.sh: Permission denied
✅ 解决:
chmod +x script.sh
echo $VAR
如果:
就会得到空值或逻辑错误。
✅ 建议:
set -u # 未定义变量直接报错
cd logs
rm *
如果当前目录不对,可能删错地方。
✅ 建议:
cd "$(dirname "$0")"
jq: command not found
✅ 排查:
which jq
echo $PATH
脚本里用了:
systemctl restart nginx
但没 sudo,就会失败。
✅ 解决:
sudo ./script.sh
比如:
if [ $? -eq 0 ]
但前面已经用了 $?。
✅ 建议:
set -e
set -x
在脚本开头加:
#!/bin/bash
set -euo pipefail
运行调试:
bash -x script.sh
如果你愿意,可以把报错信息 + 脚本片段发出来,例如:
报错:
line 12: syntax error near unexpected token `fi'
脚本:
if [ "$a" = "1" ]
echo ok
fi
我可以直接帮你改到能跑 ✅
如果你愿意,现在就可以把具体报错内容贴出来。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。