Android

Como comparar seqüências de caracteres no bash

Shell Scripting Tutorial | Shell Scripting Crash Course | Linux Certification Training | Edureka

Shell Scripting Tutorial | Shell Scripting Crash Course | Linux Certification Training | Edureka

Índice:

Anonim

Ao escrever scripts Bash, você frequentemente precisará comparar duas strings para verificar se são iguais ou não. Duas cadeias são iguais quando têm o mesmo comprimento e contêm a mesma sequência de caracteres.

Este tutorial descreve como comparar seqüências de caracteres no Bash.

Operadores de comparação

Operadores de comparação são operadores que comparam valores e retornam verdadeiro ou falso. Ao comparar seqüências de caracteres no Bash, você pode usar os seguintes operadores:

  • string1 = string2 e string1 == string2 - O operador de igualdade retornará true se os operandos forem iguais.
    • Use o operador = com o test ; then echo "Strings are equal." else echo "Strings are not equal." fi ; then echo "Strings are equal." else echo "Strings are not equal." fi

      Quando o script é executado, ele imprime a seguinte saída.

      Strings are equal.

      Aqui está outro script que pega a entrada do usuário e compara as strings fornecidas. Neste exemplo, usaremos o ]; then echo "Strings are equal." else echo "Strings are not equal." fi ]; then echo "Strings are equal." else echo "Strings are not equal." fi

      Execute o script e insira as strings quando solicitado:

      Enter first string: Linuxize Enter second string: Ubuntu Strings are not equal.

      Você também pode usar o lógico e && e ou || para comparar strings:

      ] && echo "Equal" || echo "Not equal"

      Not equal

      Verifique se uma string contém uma subcadeia

      Existem várias maneiras de verificar se uma sequência contém uma substring.

      Uma abordagem é usar o contorno da substring com símbolos de asterisco * que significa corresponder a todos os caracteres.

      #!/bin/bash VAR='GNU/Linux is an operating system' if]; then echo "It's there." fi

      O script ecoará o seguinte:

      It's there.

      Outra opção é usar o operador regex =~ como mostrado abaixo:

      #!/bin/bash VAR='GNU/Linux is an operating system' if]; then echo "It's there." fi

      O período seguido por um asterisco .* Corresponde a zero ou mais ocorrências de qualquer caractere, exceto um caractere de nova linha.

      Verifique se uma String está Vazia

      Com bastante frequência, você também precisará verificar se uma variável é uma sequência vazia ou não. Você pode fazer isso usando os operadores -n e -z .

      #!/bin/bash VAR='' if]; then echo "String is empty." fi

      String is empty.

      #!/bin/bash VAR='Linuxize' if]; then echo "String is not empty." fi

      String is not empty.

      Comparando Strings com o Operador de Caso

      Em vez de usar os operadores de teste, você também pode usar a instrução case para comparar seqüências de caracteres:

      #!/bin/bash VAR="Arch Linux" case $VAR in "Arch Linux") echo -n "Linuxize matched";; Fedora | CentOS) echo -n "Red Hat";; esac

      Linuxize matched.

      Comparação Lexicográfica

      A comparação lexicográfica é uma operação em que duas seqüências de caracteres são comparadas em ordem alfabética, comparando os caracteres em uma sequência seqüencialmente da esquerda para a direita. Esse tipo de comparação é raramente usado.

      Os scripts a seguir comparam duas seqüências lexicograficamente:

      #!/bin/bash VAR1="Linuxize" VAR2="Ubuntu" if]; then echo "${VAR1} is lexicographically greater then ${VAR2}." elif]; then echo "${VAR2} is lexicographically greater than ${VAR1}." else echo "Strings are equal" fi

      O script produzirá o seguinte:

      Ubuntu is lexicographically greater than Linuxize.

      Conclusão

      A comparação de strings é uma das operações mais básicas e usadas com mais freqüência nos scripts do Bash. Depois de ler este tutorial, você deve entender bem como comparar seqüências de caracteres no Bash. Você também pode verificar nosso guia sobre concatenação de cadeias.

      terminal bash