Bash script – Comparação de strings

 

Neste artigo sobre linguagem de programação BASH, vou tratar de comparação de strings. Comparar strings é uma tarefa rotineira quando criamos scripts para vários fins. Existe sempre a necessidade de comparar se duas frases ou duas palavras são iguais ou diferentes.

Este artigo destina-se a perceber como se compara uma determinada string com outra. E para tal usaremos os operadores relacionais. Apesar de ser conceitos fáceis de assemelhar são de todo importantes. E como tal não podem ser deixados de parte.

Operadores Relacionais

Os operadores relacionais trabalham como comparações, igualdades e desigualdades. Eles verificam os valores dos operandos, neste caso as strings, que fica cada uma de um lado do operador, retornando  VERDADEIRO ou FALSO.

Atenção que o retorno da comparação retorna 0 para VERDADEIRO e 1 para FALSO.

Devemos colocar as variáveis entre aspas “$a” para que as varias palavras que possam existir na variável não serem interpretadas como vários valores. Existe situações em que não se pode colocar mas são algumas exceções que irei mais tarde abordar.

Para podermos testar as comparações iremos usar a variável especial  $? que nos permite saber o valor retornado da comparação.

A seguinte tabela lista os operadores relacionais para strings e o seu significado.

OPERADORSIGNIFICADO
= ou ==As duas  strings são iguais.
!=As duas strings são diferentes.
>A string da direita é maior que a string  da esquerda pela ordem alfabética usando a tabela ASCII.
<A string da direita é menor que a string da esquerda pela ordem alfabética usando a tabela ASCII.
-z Testa se a string está vazia.
-nTesta se uma determinada string é nula, se não existe.

Exemplos

Neste exemplo testamos se os caracteres que as variáveis a e b guardam são iguais, é comparado as duas strings diretamente. Também é comparado se a variável a é igual à variável a que como é óbvio são iguais.

#!/bin/bash

# Variáveis para comparação
a="abc"
b="def"

# As strings são iguais?
[ "$a" == "$b" ]; echo O resultado da comparação é: $?;
# Esta comparação irá retornar 1 pois elas são diferentes.

# As strings são iguais?
[ "abc" == "def" ]; echo O resultado da comparação é: $?;
# Esta comparação irá retornar 1 pois elas são diferentes.
echo
echo
# As strings são iguais?
[ "$a" == "$a" ]; echo O resultado da comparação é: $?
# Esta comparação irá retornar 0 pois elas são iguais.

# As strings são iguais?
[ "abc" == "abc" ]; echo O resultado da comparação é: $?
# Esta comparação irá retornar 0 pois elas são iguais.

echo
echo
echo 0 - Significa VERDADEIRO
echo 1 - Significa FALSO

Neste exemplo testamos se os caracteres que as variáveis a e b guardam são diferentes, é comparado as duas strings diretamente. Também é comparado se a variável a é diferente da variável a que como é óbvio são iguais.

#!/bin/bash

# Variáveis para comparação
a="abc"
b="def"

# As strings são diferentes?
[ "$a" != "$b" ]; echo O resultado da comparação é: $?;
# Esta comparação irá retornar 0 pois elas são diferentes.

# As strings são diferentes?
[ "abc" != "def" ]; echo O resultado da comparação é: $?;
# Esta comparação irá retornar 0 pois elas são diferentes.
echo
echo
# As strings são diferentes?
[ "$a" != "$a" ]; echo O resultado da comparação é: $?
# Esta comparação irá retornar 1 pois elas são iguais.

# As strings são diferentes?
[ "abc" != "abc" ]; echo O resultado da comparação é: $?
# Esta comparação irá retornar 1 pois elas são iguais.


echo
echo
echo 0 - Significa VERDADEIRO
echo 1 - Significa FALSO

Neste exemplo testamos se os caracteres que a variável a guarda são maior que os caracteres que variável b guarda, é comparado as duas strings diretamente. Também é comparado se os caracteres que a variável a guarda é maior que os caracteres que a variável a guarda. Ainda se compara se os caracteres que a variável b guarda é maior que se os caracteres que a variável a guarda, bem como a string diretamente. Esta comparação é feita segundo a tabela ASCII.

Podemos ver que o script usa uma barra \ antes do operador >, é necessário fazer o escape do carácter > bem como < porque em BASH eles têm outra utilidades como o redirecionamento de output/input, que só irei abordar em outro artigo.

#!/bin/bash

# Variáveis para comparação
a="abc"
b="def"

# As strings na variável $a é maior que a string na variável $b?
[ "$a" \> "$b" ]; echo O resultado da comparação é: $?;
# Esta comparação irá retornar 1 pois abc vem primeiro que def pela tabela ASCII.

# As primeira string é maior que a segunda string?
[ "abc" \> "def" ]; echo O resultado da comparação é: $?;
# Esta comparação irá retornar 1 pois abc vem primeiro que def pela tabela ASCII.
echo
echo
# As strings na variável $a é maior que a string na variável $a?
[ "$a" \> "$a" ]; echo O resultado da comparação é: $?
# Esta comparação irá retornar 1 pois elas são iguais.

# As primeira string é maior que a segunda string?
[ "abc" \> "abc" ]; echo O resultado da comparação é: $?
# Esta comparação irá retornar 1 pois elas são iguais.
echo
echo
# As strings na variável $b é maior que a string na variável $a?
[ "$b" \> "$a" ]; echo O resultado da comparação é: $?
# Esta comparação irá retornar 0 pois def vem depois que abc pela tabela ASCII.

# As primeira string é maior que a segunda string?
[ "def" \> "abc" ]; echo O resultado da comparação é: $?
# Esta comparação irá retornar 0 pois def vem depois que abc pela tabela ASCII.

echo
echo
echo 0 - Significa VERDADEIRO
echo 1 - Significa FALSO

Neste exemplo testamos se os caracteres que a variável a guarda são menores que os caracteres que variável b guarda, é comparado as duas strings diretamente. Também é comparado se os caracteres que a variável a guarda é menor que os caracteres que a variável a guarda. Ainda se compara se os caracteres que a variável b guarda é menor que se os caracteres que a variável a guarda, bem como a string diretamente. Esta comparação é feita segundo a tabela ASCII.

#!/bin/bash

# Variáveis para comparação
a="abc"
b="def"

# As strings na variável $a é menor que a string na variável $b?
[ "$a" \< "$b" ]; echo O resultado da comparação é: $?;
# Esta comparação irá retornar 0 pois abc vem primeiro que def pela tabela ASCII.

# As primeira string é menor que a segunda string?
[ "abc" \< "def" ]; echo O resultado da comparação é: $?;
# Esta comparação irá retornar 0 pois abc vem primeiro que def pela tabela ASCII.
echo
echo
# As strings na variável $a é menor que a string na variável $a?
[ "$a" \< "$a" ]; echo O resultado da comparação é: $?
# Esta comparação irá retornar 1 pois elas são iguais.

# As primeira string é menor que a segunda string?
[ "abc" \< "abc" ]; echo O resultado da comparação é: $?
# Esta comparação irá retornar 1 pois elas são iguais.
echo
echo
# As strings na variável $b é menor que a string na variável $a?
[ "$b" \< "$a" ]; echo O resultado da comparação é: $?
# Esta comparação irá retornar 0 pois def vem depois que abc pela tabela ASCII.

# As primeira string é menor que a segunda string?
[ "def" \< "abc" ]; echo O resultado da comparação é: $?
# Esta comparação irá retornar 0 pois def vem depois que abc pela tabela ASCII.

echo
echo
echo 0 - Significa VERDADEIRO
echo 1 - Significa FALSO

Neste exemplo iremos testar se as variáveis estão vazias e ou se são nulas.

#!/bin/bash

# Variáveis para comparação
a=""
b="eu tenho caracteres"

# A variável a está vazia?
[ -z "$a" ]; echo O resultado da comparação é: $?;
# Esta comparação irá retornar 0 pois a variável a está vazia.

# A variável b está vazia?
[ -z "$b" ]; echo O resultado da comparação é: $?;
# Esta comparação irá retornar 1 pois a variável b não está vazia.
echo
echo
# A variável c é nula, não existe?
[ -n "$c" ]; echo O resultado da comparação é: $?;
# Esta comparação irá retornar 1 pois a variável c não existe, é nula.

# A variável b é nula, não existe?
[ -n "$b" ]; echo O resultado da comparação é: $?;
# Esta comparação irá retornar 0 pois a variável b não é nula.

echo
echo
echo 0 - Significa VERDADEIRO
echo 1 - Significa FALSO

Experimentar

Para experimentar os scripts descarregue-os e guarde dentro de uma pasta dentro da sua pasta pessoal. Terá que lhes dar permissão de execução a todos eles. Veja este exemplo de como fazer, terá que ajustar a pasta onde guardou os scripts.

$ cd Scripts/bash
$ chmod +x *
$ ./[nome do script do exemplo a executar]

Duvidas e ideias que queiram discutir sobre BASH podem ser discutidas aqui.

Partilhem, comentem e experimentem!

Eu tento pagar as contas com a publicidade que é apresentada no site, portanto os cliques que possam fazer será uma ajuda para que possa continuar, obrigado.

 

Artigos Relacionados:

Deixe uma resposta