Syntax Error “elif” inesperado esperando então

0

Eu tentei algumas outras perguntas do fórum, nada me ajudou. Então, estou postando uma nova pergunta para corrigir meu código.

    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/^.*"\(.*\)"//')
     else
        OS=$(uname -s)
        VER=$(uname -r)
    fi

Aqui elif [ -f /etc/lsb-release ]; then code mostra o erro. Ajude-me a consertar isso.

    
por Kvvaradha 16.06.2018 / 20:01

2 respostas

2

Se o shell relatar esse erro na quinta linha do script que você postou, deve haver algum erro invisível com o then na primeira linha.

Você pode visualizar seu script com cat -A para ver se há caracteres acidentais no espaço ALT ou outros caracteres não imprimíveis na linha. cat -A mostrará caracteres de alimentação de linha como $ no final de cada linha, caracteres de controle com o prefixo ^ e caracteres não imprimíveis com o 8º bit definido com o prefixo M- . Por exemplo, os caracteres TAB aparecerão como ^I .

A saída cat -A pode parecer um pouco confusa, mas é uma ótima maneira de garantir que não haja caracteres não imprimíveis nos locais onde eles não deveriam estar.

    
por 16.06.2018 / 20:12
0

Esse trecho de script é bom para mim. Como o @telecoM observa, é provável que alguns caracteres estranhos estejam dentro do seu script.

$ 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/^.*"\(.*\)"//')$
     else$
        OS=$(uname -s)$
        VER=$(uname -r)$
    fi$
$ ./x1
$
    
por 16.06.2018 / 20:14