Introduzione

Quando si scrivono script Bash, è spesso necessario confrontare due stringhe per verificare se sono uguali o meno. Due stringhe sono uguali quando hanno la stessa lunghezza e contengono la stessa sequenza di caratteri.

Questo tutorial descrive come confrontare le stringhe in Bash.

Operatori di confronto

Gli operatori di confronto sono operatori che confrontano valori e restituiscono vero o falso. Quando si confrontano le stringhe in Bash è possibile utilizzare i seguenti operatori:

  • string1 = string2e string1 == string2- L'operatore di uguaglianza ritorna vero se gli operandi sono uguali.
  • Utilizzare l'operatore = con il comando test  [
  • Utilizzare l'operatore == con il comando [[ per la corrispondenza dei motivi.
  • string1 != string2 - L'operatore di disuguaglianza restituisce vero se gli operandi non sono uguali.
  • string1 =~ regex- L'operatore regex restituisce true se l'operando di sinistra corrisponde all'espressione regolare estesa a destra.
  • string1 > string2 - L'operatore maggiore di restituisce vero se l'operando di sinistra è maggiore di quello di destra ordinato per ordine lessicografico (alfabetico).
  • string1 < string2 - L'operatore minore di restituisce vero se l'operando destro è maggiore del diritto ordinato per ordine lessicografico (alfabetico).
  • -z string - Vero se la lunghezza della stringa è zero.
  • -n string - Vero se la lunghezza della stringa è diversa da zero.

Di seguito sono riportati alcuni punti da notare quando si confrontano le stringhe:

  • È necessario utilizzare uno spazio vuoto tra l'operatore binario e gli operandi.
  • Utilizzare sempre virgolette doppie attorno ai nomi delle variabili per evitare problemi di divisione delle parole o globbing.
  • Bash non separa le variabili per "tipo", le variabili vengono trattate come numeri interi o stringhe a seconda del contesto.

Controlla se due stringhe sono uguali

Nella maggior parte dei casi, quando si confrontano le stringhe, si desidera verificare se le stringhe sono uguali o meno.

Lo script seguente utilizza l'istruzione if e il comando [ test per verificare se le stringhe sono uguali o meno con l'operatore =:

#!/bin/bash

VAR1="Noviello"
VAR2="Noviello"

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

Quando lo script viene eseguito, verrà stampato il seguente output.

Strings are equal.

Ecco un altro script che accetta l'input dell'utente e confronta le stringhe fornite. In questo esempio, utilizzeremo il comando [[ e l'operatore ==.

#!/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

Esegui lo script e inserisci le stringhe quando richiesto:

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

Puoi anche usare le stringhe logiche && o || per confrontare:

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

Controlla se una stringa contiene una sottostringa

Esistono diversi modi per verificare se una stringa contiene una sottostringa.

Un approccio consiste nel circondare la sottostringa con simboli di asterisco * che indica una corrispondenza di tutti i caratteri.

#!/bin/bash

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

Lo script farà echo a quanto segue:

It's there.

Un'altra opzione è quella di utilizzare l'operatore regex =~ come mostrato di seguito:

#!/bin/bash

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

Il periodo seguito da un asterisco .* corrisponde a zero o più occorrenze di qualsiasi carattere tranne un carattere di nuova riga.

Controlla se una stringa è vuota

Molto spesso dovrai anche verificare se una variabile è una stringa vuota o meno. Puoi farlo usando gli operatori -n e -z.

#!/bin/bash

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

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

Confronto delle stringhe con l'operatore Case

Invece di usare gli operatori di test puoi anche usare l'istruzione case per confrontare le stringhe:

#!/bin/bash

VAR="Arch Linux"

case $VAR in

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

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

Confronto lessicografico

Il confronto lessicografico è un'operazione in cui due stringhe vengono confrontate in ordine alfabetico confrontando i caratteri in una stringa in sequenza da sinistra a destra. Questo tipo di confronto viene usato raramente.

I seguenti script confrontano due stringhe lessicograficamente:

#!/bin/bash

VAR1="Noviello"
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

Lo script genererà quanto segue:

Ubuntu is lexicographically greater than Noviello.

Conclusione

Il confronto delle stringhe è una delle operazioni più basilari e utilizzate di frequente negli script Bash. Dopo aver letto questo tutorial, dovresti avere una buona conoscenza di come confrontare le stringhe in Bash. Puoi anche consultare la nostra guida sulla concatenazione di stringhe.