我正在为我的代码发布一个新问题来修复错误。
if [ -f /etc/centos-release ]; then
OS="CentOs"
VERFULL=$(sed 's/^.*release //;s/ (Fin.*$//' /etc/centos-release)
VER=${VERFULL:0:1} # return 6 or 7
elif [ -f /etc/lsb-release ]; then
OS=$(grep DISTRIB_ID /etc/lsb-release | sed 's/^.*=//')
VER=$(grep DISTRIB_RELEASE /etc/lsb-release | sed 's/^.*=//')
elif [ -f /etc/os-release ]; then
OS=$(grep -w ID /etc/os-release | sed 's/^.*=//')
VER=$(grep VERSION_ID /etc/os-release | sed 's/^.*"\(.*\)"/\1/')
else
OS=$(uname -s)
VER=$(uname -r)
fi
这里的elif [ -f /etc/lsb-release ]; then
代码显示了错误。
答案1
如果 shell 在您发布的脚本的第 5 行报告该错误,则then
第一行一定存在一些不可见的错误。
您可以使用 查看脚本cat -A
来查看该行中是否存在意外的 ALT 空格字符或其他不可打印的字符。将显示每行末尾的cat -A
换行字符、带有前缀的控制字符以及带有前缀设置的第 8 位的不可打印字符。例如,TAB 字符将显示为。$
^
M-
^I
输出cat -A
可能看起来有点混乱,但这是确保不存在任何不可打印字符的好方法。
答案2
您可以通过运行以下命令来更改文件:
sed -i 's/\r$//' filename
答案3
我遇到了这类问题。我的解决方案是在该文件上运行 dos2unix 。后来一切都很好。
答案4
该脚本片段对我来说运行良好。正如 @telecoM 所指出的,您的脚本中可能存在一些奇怪的字符。
$ cat -A x1
#!/bin/bash$
if [ -f /etc/centos-release ]; then$
OS="CentOs"$
VERFULL=$(sed 's/^.*release //;s/ (Fin.*$//' /etc/centos-release)$
VER=${VERFULL:0:1} # return 6 or 7$
elif [ -f /etc/lsb-release ]; then$
OS=$(grep DISTRIB_ID /etc/lsb-release | sed 's/^.*=//')$
VER=$(grep DISTRIB_RELEASE /etc/lsb-release | sed 's/^.*=//')$
elif [ -f /etc/os-release ]; then$
OS=$(grep -w ID /etc/os-release | sed 's/^.*=//')$
VER=$(grep VERSION_ID /etc/os-release | sed 's/^.*"\(.*\)"/\1/')$
else$
OS=$(uname -s)$
VER=$(uname -r)$
fi$
$ ./x1
$