Bash script – Operadores Relacionais – 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 comparando um determinado valor contido em uma variável ou em uma string, igualdade, diferença, maior, menor, vazia e nula. Eles verificam os valores nas variáveis ou 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.
Usamos os operadores da seguinte forma:
[[ “VARIÁVEL OU STRING” OPERADOR “VARIÁVEL OU STRING” ]]
[[ “a” == “a” ]]
Temos que deixar sempre um espaço depois dos parêntesis rectos abertos [[ e antes dos parêntesis rectos fechados ]] , se não fizermos, teremos um erro de sintaxe.
Iremos usar a variável especial $? que nos permite saber o valor retornado na comparação.
A seguinte tabela lista os operadores relacionais para strings e o seu significado.
OPERADOR | SIGNIFICADO |
---|---|
= ou == | As duas strings são iguais. |
!= | As duas strings são diferentes. |
> | A string da esquerda é maior que a string da direita pela ordem alfabética usando a tabela ASCII. |
< | A string da esquerda é menor que a string da direita pela ordem alfabética usando a tabela ASCII. |
-z | Testa se a string está vazia. |
-n | Testa 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 variáveis 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 variáveis 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 variáveis 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 variáveis 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.
#!/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.