Como verificar não começa com condição na instrução if?

0

Eu quero verificar a condição como abaixo. A linha não deve começar com # símbolo:

if[ ! ["$Line" == "#*"] ]; then

Mas isso não está funcionando.

    
por Rajagopalarao 30.06.2016 / 06:37

2 respostas

1

Existem muitos problemas em seu trecho, mas basicamente a sintaxe [![...]] não é válida, no bash (e em muitos outros shells) [[ é um único comando, que não pode ser dividido por nenhum outro caractere.

Você pode negar o operador de igualdade:

if [[ "$LINE" != \#* ]]; then echo yes; fi

Observe também de perto os espaços que cercam os parênteses.

    
por 30.06.2016 / 07:53
0

Supondo que você tenha uma string na variável line e queira gerar a string yes se ela não começar com o caractere # . Nos exemplos abaixo, eu também mostrarei no quando a condição não for atendida.

case $line in
    "#"*) echo no
esac

A instrução case usa uma variável e, em seguida, qualquer número de padrões (globbing), e executa o código para o padrão que corresponde ao valor da variável. Nesse caso, tentamos corresponder o padrão "#"* (o # deve ser citado para não ser considerado como introdução de um comentário) e, se ele corresponder, uma instrução echo será executada.

Se houver mais padrões, o código para todos, menos o último, terá que ser terminado por ;; , como em

case $line in
    "#"*) echo no ;;
    *)    echo yes
esac

... e o código de um padrão pode estar vazio:

case $line in
    "#"*) ;;
    *)    echo yes
esac

O shell bash também faz correspondência de padrões com globs em [[ ... ]] com o operador == :

if [[ $line != "#"* ]]; then
    echo yes
else
    echo no
fi

Em bash , você também pode usar a expressão regular correspondente ao operador =~ em [[ ... ]] :

if ! [[ $line =~ ^# ]]; then
    echo yes
else
    echo no
fi

ou

if [[ $line =~ ^[^#] ]]; then
    echo yes
else
    echo no
fi

Se você estiver redigindo um arquivo linha por linha, o shell não é a ferramenta certa para esse trabalho. Em vez disso, você pode querer usar algo como awk :

awk '/^[^#]/ { print yes }' <inputfile

Relacionados:

por 31.08.2018 / 08:54