Skip to main content

Come utilizzare le condizioni di prova all'interno di uno script Bash

Jackson Katz: Violence against women—it's a men's issue (Aprile 2025)

Jackson Katz: Violence against women—it's a men's issue (Aprile 2025)
Anonim

Il comando test può essere usato sulla riga di comando di Linux per confrontare un elemento con un altro, ma è più comunemente usato negli script di shell BASH come parte di istruzioni condizionali che controllano la logica e il flusso del programma.

Un esempio di base

Puoi provare questi comandi semplicemente aprendo una finestra di terminale.

test 1 -eq 2 && echo "si" || echo "no"

Il comando precedente può essere suddiviso come segue:

  • test - Questo significa che stai per eseguire un confronto
  • 1 - Il primo elemento che confronterai
  • -eq - Come stai confrontando. In questo caso, stai verificando se un numero è uguale a un altro.
  • 2 - L'elemento con cui stai confrontando il primo elemento
  • && - Esegui la seguente dichiarazione se il risultato è vero
  • echo "yes": il comando da eseguire se il confronto restituisce true
  • || - Esegui la seguente dichiarazione se il risultato è falso
  • echo "no" - Il comando da eseguire se il confronto restituisce false

In sostanza, il comando sta confrontando 1 a 2 e se corrispondono, viene eseguita l'istruzione "si" echo che visualizza "sì" e se non corrispondono, viene eseguita l'istruzione "no" echo che visualizza "no".

Confronto di numeri

Se si confrontano elementi che vengono analizzati come numeri, è possibile utilizzare i seguenti operatori di confronto:

  • -eq - valore 1 uguale a 2
  • -ge - è il valore 1 maggiore o uguale al valore 2
  • -gt - è il valore 1 maggiore del valore 2
  • -le - è il valore 1 minore o uguale al valore 2
  • -lt - è il valore 1 in meno del valore 2
  • -ne - il valore 1 non è uguale al valore 2

Esempi

test 1 -eq 2 && echo "si" || echo "no"

(visualizza "no" sullo schermo perché 1 non è uguale a 2)

test 1 -ge 2 && echo "si" || echo "no"

(visualizza "no" sullo schermo perché 1 non è maggiore o uguale a 2)

test 1 -gt 2 && echo "si" || echo "no"

(visualizza "no" sullo schermo perché 1 non è maggiore di 2)

test 1 -le 2 && echo "si" || echo "no"

(visualizza "sì" sullo schermo perché 1 è minore o uguale a 2)

test 1 -lt 2 && echo "si" || echo "no"

(visualizza "sì" sullo schermo perché 1 è minore o uguale a 2)

test 1 -ne 2 && echo "si" || echo "no"

(visualizza "sì" sullo schermo perché 1 non è uguale a 2)

Confronto di testo

Se si confrontano elementi che analizzano come stringhe, è possibile utilizzare i seguenti operatori di confronto:

  • = - fa stringa 1 stringa 2
  • ! = - è la stringa 1 diversa dalla stringa 2
  • -n - è la lunghezza della stringa maggiore di 0
  • -z - è la lunghezza della stringa 0

Esempi

test "string1" = "stringa2" && echo "sì" || echo "no"

(visualizza "no" sullo schermo perché "stringa1" non è uguale a "stringa2")

prova "string1"! = "stringa2" && echo "sì" || echo "no"

(visualizza "sì" sullo schermo perché "stringa1" non è uguale a "stringa2")

test -n "string1" && echo "si" || echo "no"

(visualizza "sì" sullo schermo perché "stringa1" ha una lunghezza di stringa maggiore di zero)

test -z "string1" && echo "si" || echo "no"

(visualizza "no" sullo schermo perché "stringa1" ha una lunghezza di stringa maggiore di zero)

Confronto di file

Se si confrontano i file, è possibile utilizzare i seguenti operatori di confronto:

  • -ef - I file hanno lo stesso numero di dispositivo e inode (sono lo stesso file)
  • -nt - È il primo file più recente del secondo file
  • -ot - È il primo file più vecchio del secondo file
  • -b - Il file esiste ed è un blocco speciale
  • -c - Il file esiste ed è un personaggio speciale
  • -d - Il file esiste ed è una directory
  • -e - Il file esiste
  • -f - Il file esiste ed è un file normale
  • -g - Il file esiste e ha il numero di gruppo specificato
  • -G - Il file esiste e il proprietario appartiene al gruppo dell'utente
  • -h - Il file esiste ed è un collegamento simbolico
  • -k - Il file esiste e ha il suo set sticky bit
  • -L - Lo stesso di -h
  • -O - ​​Il file esiste tu sei il proprietario
  • -p - Il file esiste ed è una named pipe
  • -r - Il file esiste ed è leggibile
  • -s - Il file esiste e ha una dimensione maggiore di zero
  • -S - Il file esiste ed è un socket
  • -t - Il descrittore di file è aperto su un terminale
  • -u - Il file esiste e il bit set-user-id è impostato
  • -w - Il file esiste ed è scrivibile
  • -x - Il file esiste ed è eseguibile

Esempi

test / percorso / su / file1 -nt / percorso / su / file2 && echo "sì"

(Se file1 è più recente di file2, verrà visualizzata la parola "sì")

prova -e / percorso / a / file1 && echo "sì"

(se file1 esiste verrà visualizzata la parola "sì")

test -O / percorso / per / file1 && echo "sì"

(se si possiede file1, viene visualizzata la parola "sì")

Terminologia

  • Block special - Il file è un dispositivo a blocchi che significa che i dati vengono letti in blocchi di byte. Questi sono generalmente file di dispositivo come dischi rigidi.
  • Caratteri speciali: il file viene immediatamente interpretato quando si scrive su di esso ed è comunemente un dispositivo come una porta seriale

Confronto tra più condizioni

Finora, tutto è stato confrontando una cosa contro un'altra, ma cosa succede se si desidera confrontare due condizioni?

Ad esempio, se un animale ha 4 zampe e va "moo", probabilmente è una mucca. Il semplice controllo di 4 zampe non garantisce di avere una mucca, ma controlla il suono che fa sicuramente.

Per testare entrambe le condizioni contemporaneamente, utilizzare la seguente dichiarazione:

test 4 -eq 4 -a "moo" = "moo" && echo "è una mucca" || echo "non è una mucca"

La parte chiave qui è la -a che sta per e .

Esiste un modo migliore e più comunemente usato per eseguire lo stesso test e questo è il seguente:

test 4 -eq 4 && test "moo" = "moo" && echo "è una mucca" || echo "non è una mucca"

Un altro test che potresti voler fare è confrontare due affermazioni e se una delle due è vera, emette una stringa. Ad esempio, se si desidera verificare che esista un file denominato "file1.txt" o che esista un file denominato "file1.doc", è possibile utilizzare il seguente comando:

test -e file1.txt -o -e file1.doc && echo "file1 esiste" || echo "file1 non esiste"

La parte chiave qui è la -o che sta per o .

Esiste un modo migliore e più comunemente usato per eseguire lo stesso test e questo è il seguente:

prova -e file1.txt || test -e file1.doc && echo "file1 esiste" || echo "file1 non esiste"

Eliminazione della parola chiave test

In realtà non è necessario utilizzare la parola test per eseguire il confronto. Tutto quello che devi fare è racchiudere la frase tra parentesi quadre come segue:

-e file1.txt && echo "file1 esiste" || echo "file1 non esiste"

Il e in pratica significa lo stesso di test.

Ora lo sai che puoi migliorare confrontando più condizioni come segue:

4 -eq 4 && "moo" = "moo" && echo "è una mucca" || echo "non è una mucca"-e file1.txt || -e file1.doc && echo "file1 esiste" || echo "file1 non esiste"

Sommario

Il comando test è più utile negli script perché è possibile verificare il valore di una variabile rispetto a un'altra e controllare il flusso del programma. Sulla riga di comando standard, è possibile utilizzarlo per verificare se un file esiste o meno.