Comparando strings em Bash um tutorial prático

Comparando strings em Bash um tutorial prático

Comparar strings é uma tarefa comum ao trabalhar com scripts de shell, entrada do usuário ou dados da string. No shell, pode ser necessário verificar se existe um valor em outra string, encontre se duas strings têm o mesmo comprimento, teste para o início ou fim de uma palavra ou qualquer outro tipo de comparação. As ferramentas do Unix padrão não fornecem muitas opções para comparar strings; A comparação lexical tradicional (como verificação se duas palavras têm o mesmo comprimento e comparar cada caractere individualmente) é difícil de implementar com eficiência no código e não é tão valioso para uma linguagem dinâmica como o Bash.

Este artigo explica maneiras diferentes de comparar strings em Bash e vários comandos relacionados.

Operadores de comparação de string

Podemos usar operadores de comparação com declarações Bash para comparar duas seqüências. Aqui está a lista de operadores de comparação para trabalhar com strings na casca de bash.

OperadorDetalhes
["String1" == "String2"]Retorna verdadeiro se ambas as cordas forem iguais.
[“String1” != “String”Retorna verdadeiro se ambas as cordas não forem iguais.
[“String = ~ regex]Compare String1 com a expressão regular e retorne as partidas verdadeiras
[-z "String"]Retorne true se o comprimento da string fornecido for zero (0)
[-n "String"]Retorne true se o comprimento da string fornecida não for zero

Agora, discutiremos o operador de comparação acima um por um com exemplos.

Comparando duas cordas são iguais?

Se você precisar verificar se duas seqüências são iguais, use o == operador. Esses operadores comparam o operando esquerdo com o operando direito e retornam true se ambos correspondem.

Vamos entender com um exemplo. Em um script de shell, inicialize duas variáveis ​​com uma corda. Em seguida, use a instrução IF para comparar se as duas seqüências são iguais ou não usando o == operador.

#!/usr/bin/Env Bash str1 = "tecadmin" str2 = "tecadmin" se ["$ str1" == "$ str2"] Então echo "ambas as cordas são iguais" mais eco ", ambas as cordas não são iguais" fi
1234567891011#!/usr/bin/Env Bash str1 = "tecadmin" str2 = "tecadmin" se ["$ str1" == "$ str2"] Então echo "ambas as cordas são iguais" mais eco ", ambas as cordas não são iguais" fi

Execute o script do shell acima em uma casca de bash e verifique os resultados.

Saída: ambas as cordas são iguais 

Agora, altere os valores de ambas as variáveis ​​com seqüências diferentes. Então novamente o script e veja os resultados.

Verifique duas strings não são iguais (!=)

Às vezes, somos obrigados a verificar se as duas seqüências não são iguais. Você pode usar != operador para testar se duas seqüências não são iguais. Vamos verificar com um exemplo:

#!/usr/bin/Env Bash str1 = "tecadmin" str2 = "helloworld" ## verifique se as duas seqüências não são iguais se ["$ str1" != "$ Str2"] então eco "Verdadeiro, ambas as cordas não são iguais" mais eco "falsas, ambas as cordas são iguais" fi
123456789101112#!/usr/bin/Env Bash str1 = "tecadmin" str2 = "helloworld" ## verifique se as duas seqüências não são iguais ["$ str1" != "$ Str2"] então eco "Verdadeiro, ambas as cordas não são iguais" mais eco "falsas, ambas as cordas são iguais" fi

Execute o script do shell acima em uma casca de bash e verifique os resultados.

Saída: Verdadeiro, ambas as cordas não são iguais 

Compare strings com expressão regular

Para comparar strings com expressões regulares em Bash, você pode usar o comando "grep" com a opção "-e" (estendida regex). O comando “Grep” procura uma string como um padrão e retorna um código de saída de sucesso (0) se o padrão for encontrado e um código de saída de falha (1) se o padrão não for encontrado.

Aqui está um exemplo de uso do comando "Grep" para comparar uma string com uma expressão regular:

String = "Hello World" se Echo "$ String" | grep -e "^olá"; Então Echo "Match Found" else Echo "Match não encontrado" Fi
123456String = "Hello World" se Echo "$ String" | grep -e "^olá"; Então Echo "Match Found" else Echo "Match não encontrado" Fi

Também podemos comparar string com uma expressão regular em scripts de bash. Ao usar a comparação de string com a expressão regular com uma instrução IF, você deve sempre incluir com [[]] citações. O exemplo abaixo mostrará ajudá -lo a verificar se a variável contém a string que começa com uma string específica.

#!/usr/bin/Env Bash str = "Tecadmin" se [["$ str" = ~ ^Tec]] então echo "Sim, a expressão regular corresponde" else Echo "Expressão regular não corresponde" Fi
12345678910#!/usr/bin/Env Bash str = "Tecadmin" se [["$ str" = ~ ^Tec]] então echo "Sim, a expressão regular corresponde" else Echo "Expressão regular não corresponde" Fi
Saída: sim, a expressão regular corresponde 

Vamos verificar outro exemplo. Neste script, levaremos o usuário a inserir um número. Em seguida, verifique se o valor de entrada é um número ou não. Um contêiner numérico os dígitos entre 0 e 9.

#!/usr/bin/Env Bash Read -p "Entre um número:" var ## verifique se o valor de entrada é um número se [["$ var" = ~ ^[0-9]+$]] então echo "dado A entrada é um número "else eco", desculpe, a entrada não é um número "fi
1234567891011#!/usr/bin/Env Bash Read -p "Entre um número:" var ## verifique se o valor de entrada é um número de [["$ var" = ~ ^[0-9]+$]] então echo "Dada entrada dada a entrada é um número "else eco" desculpe, a entrada não é um número "fi

Execute o script de bash acima e forneça a entrada quando solicitado.

Primeira execução: Entre 

Novamente execute este script, mas desta vez insira um valor não numérico e veja os resultados.

Segunda execução: entrada um número: 1234a desculpe, a entrada não é um número 

Verifique se uma string está vazia

Para verificar se uma string está vazia em Bash, você pode usar a seguinte sintaxe:

se [-z "$ string"]; Então o eco "string está vazio" else eco "string não está vazio" fi
12345se [-z "$ string"]; Então o eco "string está vazio" else eco "string não está vazio" fi

O "-Z" O operador é usado para testar se o comprimento da string for zero. Se o comprimento da corda for zero, a expressão dentro dos suportes quadrados retorna true e a cláusula "então" será executada. Se o comprimento da corda for maior que zero, a expressão retornará falsa e a cláusula "else" será executada.

Conclusão

Em conclusão, comparar strings em Bash é um aspecto fundamental da script de shell que pode ser usada para tomar decisões, controlar o fluxo de seus scripts e processar dados. Neste tutorial prático, cobrimos o básico da comparação de cordas em Bash, incluindo os vários operadores de comparação, sintaxe e armadilhas comuns. Também fornecemos exemplos e exercícios para ajudá -lo a praticar e dominar os conceitos apresentados neste tutorial. Seguindo as melhores práticas descritas neste tutorial, você pode escrever scripts mais robustos, confiáveis ​​e eficientes. Seja você iniciante ou um usuário experiente, a comparação de strings no Bash é uma habilidade valiosa que pode ajudá -lo a automatizar tarefas, resolver problemas e aproveitar ao máximo seus scripts de shell.