GNU/Linux >> Linux Esercitazione >  >> Linux

Come confrontare le stringhe in Bash

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 i valori e restituiscono true o false. Quando confronti le stringhe in Bash puoi usare i seguenti operatori:

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

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

  • Deve essere utilizzato uno spazio vuoto tra l'operatore binario e gli operandi.
  • Utilizza sempre le virgolette tra i nomi delle variabili per evitare problemi di suddivisione delle parole o di globbing.
  • Bash non separa le variabili per "tipo", le variabili vengono trattate come intere 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 usa l'istruzione if e il test [ comando per verificare se le stringhe sono uguali o meno a = operatore:

#!/bin/bash

VAR1="Linuxize"
VAR2="Linuxize"

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

Quando lo script viene eseguito, stamperà il seguente output.

Strings are equal.

Ecco un altro script che prende l'input dall'utente e confronta le stringhe fornite. In questo esempio useremo il [[ comando e == 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: Linuxize
Enter second string: Ubuntu
Strings are not equal.

Puoi anche usare la logica e && e o || per confrontare le stringhe:

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

Verifica se una stringa contiene una sottostringa #

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

Un approccio consiste nell'utilizzare circondare la sottostringa con simboli di asterisco * il che significa corrisponde a tutti i caratteri.

#!/bin/bash

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

Lo script farà eco a quanto segue:

It's there.

Un'altra opzione è usare 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 punto seguito da un asterisco .* corrisponde a zero o più occorrenze qualsiasi carattere tranne un carattere di nuova riga.

Verifica se una stringa è vuota #

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

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

Confronto di 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 "Linuxize matched"
    ;;

  Fedora | CentOS)
    echo -n "Red Hat"
    ;;
esac
Linuxize 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 è usato raramente.

I seguenti script confrontano lessicograficamente due stringhe:

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

Lo script produrrà quanto segue:

Ubuntu is lexicographically greater than Linuxize.

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 comprensione di come confrontare le stringhe in Bash. Puoi anche consultare la nostra guida sulla concatenazione di stringhe.

Se hai domande o feedback, sentiti libero di lasciare un commento.


Linux
  1. Come usare i comandi della cronologia di Bash

  2. Come confrontare numeri e stringhe nello script della shell di Linux

  3. Come abbreviare il prompt di Bash in Linux?

  4. Come confrontare due stringhe nel formato della versione separata da punti in Bash?

  5. Bash - Come stampare stringhe multilinea (con '\n') usando printf

Come creare alias Bash

Bash concatena le stringhe

Come leggere un file riga per riga in Bash

Come usare bash if -z e if -n per testare le stringhe in Linux

Come eseguire uno script Bash

Come impostare la variabile d'ambiente in Bash