语法错误“elif”意外期待然后

语法错误“elif”意外期待然后

我正在为我的代码发布一个新问题来修复错误。

    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
$

相关内容