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: