GNU/Linux >> Znalost Linux >  >> Linux

Jak porovnávat řetězce v Bash

Při psaní Bash skriptů budete často muset porovnat dva řetězce, abyste zjistili, zda jsou stejné nebo ne. Dva řetězce jsou stejné, když mají stejnou délku a obsahují stejnou sekvenci znaků.

Tento tutoriál popisuje, jak porovnávat řetězce v Bash.

Porovnávací operátory #

Porovnávací operátory jsou operátory, které porovnávají hodnoty a vracejí true nebo false. Při porovnávání řetězců v Bash můžete použít následující operátory:

  • string1 = string2 a string1 == string2 - Operátor rovnosti vrátí hodnotu true, pokud jsou operandy stejné.
    • Použijte = operátor s test [ příkaz.
    • Použijte == operátor s [[ příkaz pro porovnávání vzorů.
  • string1 != string2 - Operátor nerovnosti vrátí hodnotu true, pokud se operandy nerovnají.
  • string1 =~ regex - Operátor regulárního výrazu vrátí hodnotu true, pokud levý operand odpovídá rozšířenému regulárnímu výrazu vpravo.
  • string1 > string2 - Operátor větší než vrátí hodnotu true, pokud je levý operand větší než pravý seřazený podle lexikografického (abecedního) pořadí.
  • string1 < string2 - Operátor menší než vrátí hodnotu true, pokud je pravý operand větší než pravý seřazený podle lexikografického (abecedního) pořadí.
  • -z string - True, pokud je délka řetězce nula.
  • -n string - True, pokud je délka řetězce nenulová.

Při porovnávání řetězců je třeba vzít v úvahu několik bodů:

  • Mezi binárním operátorem a operandy je třeba použít mezeru.
  • Vždy používejte dvojité uvozovky kolem názvů proměnných, abyste se vyhnuli problémům s dělením slov nebo shlukováním.
  • Bash neodděluje proměnné podle „typu“, proměnné jsou považovány za celé číslo nebo řetězec v závislosti na kontextu.

Zkontrolujte, zda jsou dva řetězce stejné #

Ve většině případů byste při porovnávání řetězců chtěli zkontrolovat, zda jsou řetězce stejné nebo ne.

Následující skript používá příkaz if a test [ příkaz ke kontrole, zda jsou řetězce stejné nebo ne s = operátor:

#!/bin/bash

VAR1="Linuxize"
VAR2="Linuxize"

if [ "$VAR1" = "$VAR2" ]; then
    echo "Strings are equal."
else
    echo "Strings are not equal."
fi

Když je skript spuštěn, vytiskne následující výstup.

Strings are equal.

Zde je další skript, který přebírá vstup od uživatele a porovnává dané řetězce. V tomto příkladu použijeme [[ příkaz a == operátor.

#!/bin/bash

read -p "Enter first string: " VAR1
read -p "Enter second string: " VAR2

if [[ "$VAR1" == "$VAR2" ]]; then
    echo "Strings are equal."
else
    echo "Strings are not equal."
fi

Spusťte skript a po zobrazení výzvy zadejte řetězce:

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

Můžete také použít logické a && a nebo || pro porovnání řetězců:

[[ "string1" == "string2" ]] && echo "Equal" || echo "Not equal"
Not equal

Zkontrolujte, zda řetězec obsahuje podřetězec #

Existuje několik způsobů, jak zkontrolovat, zda řetězec obsahuje podřetězec.

Jedním z přístupů je použití obklopit podřetězec symboly hvězdiček * což znamená shodu všech znaků.

#!/bin/bash

VAR='GNU/Linux is an operating system'
if [[ $VAR == *"Linux"* ]]; then
  echo "It's there."
fi

Skript bude opakovat následující:

It's there.

Další možností je použití regulárního výrazu =~ jak je uvedeno níže:

#!/bin/bash

VAR='GNU/Linux is an operating system'
if [[ $VAR =~ .*Linux.* ]]; then
  echo "It's there."
fi

Tečka následovaná hvězdičkou .* odpovídá nule nebo více výskytům jakéhokoli znaku kromě znaku nového řádku.

Zkontrolujte, zda je řetězec prázdný #

Poměrně často budete muset také zkontrolovat, zda je proměnná prázdný řetězec nebo ne. Můžete to udělat pomocí -n a -z operátory.

#!/bin/bash

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

VAR='Linuxize'
if [[ -n $VAR ]]; then
  echo "String is not empty."
fi
String is not empty.

Porovnání řetězců s operátorem případu #

Místo použití testovacích operátorů můžete k porovnání řetězců použít také příkaz case:

#!/bin/bash

VAR="Arch Linux"

case $VAR in

  "Arch Linux")
    echo -n "Linuxize matched"
    ;;

  Fedora | CentOS)
    echo -n "Red Hat"
    ;;
esac
Linuxize matched.

Lexikografické srovnání #

Lexikografické srovnání je operace, při které jsou dva řetězce porovnávány abecedně porovnáním znaků v řetězci postupně zleva doprava. Tento druh srovnání se používá zřídka.

Následující skripty lexikograficky porovnávají dva řetězce:

#!/bin/bash

VAR1="Linuxize"
VAR2="Ubuntu"

if [[ "$VAR1" > "$VAR2" ]]; then
    echo "${VAR1} is lexicographically greater then ${VAR2}."
elif [[ "$VAR1" < "$VAR2" ]]; then
    echo "${VAR2} is lexicographically greater than ${VAR1}."
else
    echo "Strings are equal"
fi

Skript vypíše následující:

Ubuntu is lexicographically greater than Linuxize.

Závěr č.

Porovnání řetězců je jednou z nejzákladnějších a často používaných operací ve skriptování Bash. Po přečtení tohoto tutoriálu byste měli dobře rozumět tomu, jak porovnávat řetězce v Bash. Můžete se také podívat na naši příručku o zřetězení řetězců.

Pokud máte nějaké dotazy nebo zpětnou vazbu, neváhejte zanechat komentář.


Linux
  1. Jak napsat smyčku v Bash

  2. Jak zjistit Bash>=4.0?

  3. Jak porovnat dva řetězce ve formátu verze oddělené tečkami v Bash?

  1. Jak používat příkazy historie Bash

  2. Jak porovnávat čísla a řetězce ve skriptu Linux Shell

  3. Jak zkrátit Bash Prompt v Linuxu?

  1. Jak ladit Bash skript?

  2. Jak porovnávat řetězce ve skriptování Bash Shell

  3. Jak vyhodnotit řetězce jako čísla v Bash