统信uos中.sh脚本提示“格式错误”,主因是首行缺失或错误shebang(如缺#!/bin/bash、含空格/bom/windows换行符),需修复shebang、用dos2unix或sed清除crlf、用file -i检查并清除bom、最后chmod +x授权后./执行。

在统信UOS中运行.sh脚本时提示“格式错误”,通常不是文件损坏,而是脚本首行缺失或写错了解释器声明(shebang),导致系统无法识别该用哪个程序来执行它——没有#!/bin/bash,Linux内核就不知道该调用bash还是sh,甚至可能误当作纯文本处理。
检查并修复脚本首行shebang
第一步:用文本编辑器打开脚本,例如执行nano install.sh(若未安装nano,可改用gedit install.sh或code install.sh)。
第二步:光标定位到文件最开头,确认第一行严格为#!/bin/bash(注意:前面不能有空格、空行、BOM头,也不能是中文字符或全角符号)。
第三步:如果看到的是#!/bin/sh但脚本里用了[[ ]]或数组等bash特有语法,必须改成#!/bin/bash;如果看到# !/bin/bash(中间有空格),删掉空格。
第四步:保存退出。若用nano,按Ctrl+O → Enter → Ctrl+X;若用gedit,直接点击保存按钮即可。
清除Windows遗留的CRLF换行符
方法一:用dos2unix命令一键转换(推荐)
在终端中执行:sudo apt install dos2unix(如未安装)→ dos2unix install.sh。
方法二:用sed手动替换
执行:sed -i 's/\r$//' install.sh。这会把每行末尾的\r(回车符)删掉,只保留\n(换行符)。
【关键提示】若脚本是在Windows上用记事本、VS Code(未设LF换行)或微信/QQ传输后编辑的,极大概率带CRLF。错误表现是运行时报错: command not found,且报错信息末尾能看到^M字符。
验证脚本编码是否含BOM
执行:file -i install.sh。若输出中包含charset=utf-8-with-bom,说明文件带BOM头——Linux shell无法解析这种头部。
用vim修复:vim install.sh → 输入:set nobomb → :wq保存退出。
或者用命令批量清除:sed -i '1s/^\xEF\xBB\xBF//' install.sh(仅清除UTF-8 BOM)。
运行前务必确认权限已就绪
完成上述修复后,仍需确保脚本具备可执行权限,否则即使shebang正确也会报“Permission denied”。
执行:chmod +x install.sh → 再运行:./install.sh。











