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: