Comprensione di Bash If Else e altre Dichiarazioni Condizionali

Scrivere uno script di Bourne Again Shell (Bash) può essere un’esperienza gratificante, specialmente quando vi aggiungi logica, assicurandoti della sua robustezza. Un modo per incorporare questa logica, rendendo il tuo script più intelligente, è attraverso l’uso di istruzioni condizionali, in particolare il ‘bash if else’.

In questa approfondita esplorazione, stai per comprendere il potere e le sfumature delle istruzioni if-else e case di Bash. Questo ti aiuterà a creare script Bash privi di errori e intelligenti. Aggiungeremo anche alcune best practices per assicurarci che tu stia scrivendo script come un professionista.

Emozionato? Approfondisci e eleva la tua competenza nello scripting Bash!

Preparazione del Terreno: Prerequisiti

Per trarre il massimo da questo tutorial, ci sono alcune cose essenziali che dovresti avere a disposizione:

  • A Linux or Windows system armed with Bash. For those on Windows, the Windows Subsystem for Linux (WSL) is your best bet.
  • A code/text editor to write and refine your ‘bash if else’ scripts.

Perché Dovresti Sfruttare le Istruzioni ‘bash if else’?

Perché le istruzioni condizionali sono così apprezzate nello scripting Bash? In poche parole, dotano i tuoi script di capacità decisionali basate su condizioni predefinite.

Ad esempio, puoi utilizzare ‘bash if else’ per verificare se un file esiste prima di tentarne l’eliminazione. In alternativa, potresti voler verificare se un utente possiede le autorizzazioni necessarie prima di consentirgli l’accesso a una risorsa.

Infondere script con strutture ‘bash if else’ non solo amplifica la loro flessibilità, ma anche la loro potenza. Immagina uno script progettato per eliminare tutti i file in una cartella. Utilizzando ‘bash if else’, puoi eliminare chirurgicamente solo quei file più vecchi di 30 giorni, preservando il resto.

Approfondiamo la dichiarazione ‘bash if else’

Ora, lasciamo da parte l’introduzione e mettiamoci all’opera. Inizieremo con una delle dichiarazioni condizionali più universalmente accettate: la dichiarazione ‘bash if else’.

Al suo cuore, il ‘bash if else’ è una porta d’ingresso per inserire condizioni nei tuoi script Bash. Osserva la sua sintassi elegante di seguito:

  • Inizia con la parola chiave if, seguita dalle condizioni racchiuse tra [[ ]]. Successivamente, il codice all’interno della dichiarazione ‘bash if else’ viene eseguito, concludendosi con la parola chiave fi.
  • La parola chiave then separa la condizione dalle azioni (o dichiarazioni) che vengono eseguite quando le condizioni sono soddisfatte. Questo blocco di azioni può estendersi su più linee, separate da punti e virgola (;).
if [[ condition ]]; then
	statement
fi

Immagina di scrivere uno script per un sistema di accesso. Richiede l’inserimento del nome utente corretto prima di concedere l’accesso:

1. Avvia il tuo terminale e inizia un nuovo file bash_if_demo.sh utilizzando il tuo editor di testo preferito. Questo sarà il nostro campo di gioco per comprendere le dichiarazioni ‘bash if else’.

nano bash_if_demo.sh

2. Inserire l’esempio ‘bash if else’ fornito di seguito nel file bash_if_demo.sh. Una volta inserito, salvare le modifiche ed uscire dall’editor.

Lo script di esempio ‘bash if else’ richiede un nome utente. Se viene inserito il nome utente previsto, viene visualizzato un messaggio di benvenuto, integrato dalla data e dall’ora corrente.

Mantenere un registro della data e dell’ora dei tentativi di accesso degli utenti può essere prezioso per future analisi.

La linea introduttiva #!/bin/bash (comunemente conosciuta come shebang) indica al sistema l’interprete da utilizzare per elaborare il codice successivo nello script. Qui, ‘bash’ è il nostro interprete scelto.

#!/bin/bash
# Stampa una domanda sullo schermo.
echo "Whats your name?"
# Cattura l'input da tastiera, memorizzandolo nella variabile $NAME
read NAME
# Avvia l'istruzione 'bash if else' - verifica se il valore in $NAME
# corrisponde a "ATA". Se c'è una corrispondenza, il codice racchiuso viene eseguito. In caso contrario, viene saltato.
if [ $NAME == "ATA" ]
then
  # Visualizza un messaggio solo se il valore in $NAME è uguale a "ATA".
  echo "Welcome back ATA!"
fi
# All'esterno della struttura 'bash if else', viene sempre mostrata la data e l'ora corrente.
date

3. Ora, mettiamo alla prova il nostro script ‘bash if else’. Esegui il comando qui sotto:

bash bash_if_demo.sh

Ricorda, indipendentemente dalla variante della shell Bash che stai utilizzando, aggiungi il prefisso ‘bash’ al nome del tuo script. Questo assicura che il sistema utilizzi Bash per l’esecuzione dello script.

Inserisci “ATA” e premi Invio. Il risultato dovrebbe assomigliare al seguente:

Demonstration of the bash_if_demo.sh ‘bash if else’ Script

Se inserisci qualsiasi cosa diversa da “ATA”, il messaggio di benvenuto sarà assente dall’output. Sarà mostrata solo la data e l’ora corrente. Questo comportamento è dovuto all’istruzione ‘bash if else’ che controlla una corrispondenza precisa con il valore nella variabile $NAME.

Nota che le istruzioni ‘bash if else’ sono sensibili alle maiuscole e minuscole. Pertanto, “ata”, “aTa”, “Ata” e così via, sono diverse da “ATA”.

Outcome on Entering a Non-matching Value

Testa costantemente i tuoi script ‘bash if else’ con input variabili. Ciò assicura che gli script funzionino come previsto.

Approfondimento: Istruzioni ‘bash if else’ nidificate

Hai già compreso i fondamenti della creazione di istruzioni ‘bash if else’. Mentre questa conoscenza di base è sufficiente per compiti semplici, gli script complessi spesso richiedono costrutti avanzati. Qui entrano in gioco le istruzioni ‘bash if else’ nidificate. Essenzialmente, è un’istruzione ‘if’ che contiene una o più istruzioni ‘if’ aggiuntive.

La struttura seguente illustra la sintassi di base per le istruzioni ‘bash if else’ nidificate. Qui, la clausola esterna if [[ condizioni ]] comprende codice eseguibile solo al verificarsi della condizione. Nel nostro contesto, il codice nidificato è un’altra istruzione ‘if’.

  • if [[ condizioni ]] – Questo rappresenta l’istruzione esterna ‘if else’ di bash. Il codice nidificato (un’altra istruzione ‘if’) viene eseguito solo se la condizione specificata è vera.
  • if [[ condizione2 ]] – Questo rappresenta la clausola interna ‘if else’ di bash. Contiene il codice che viene eseguito solo se entrambe le condizioni sono soddisfatte.
if [[ conditions ]]; then
	if [[ condition2 ]]; then
		statement
	fi
fi

Andiamo più in profondità. Potenziando il nostro precedente esempio di ‘if else’ di bash, includeremo ora un’istruzione if che chiede una password:

1. Innanzitutto, crea un nuovo file intitolato bash_nested_if_demo.sh utilizzando il tuo editor di testo preferito.

nano bash_nested_if_demo.sh

2. Trasferisci il codice ‘if else’ di bash fornito di seguito nel file bash_nested_if_demo.sh, salva le tue modifiche e chiudi l’editor.

Questo codice ‘if else’ di bash richiede sia un nome che una password. Se le condizioni per il nome e la password coincidono, viene visualizzato un messaggio particolare. Se non c’è corrispondenza, l’output mostra solo la data e l’ora correnti.

#!/bin/bash
# Propone un messaggio per richiedere un nome utente.
echo "Whats your name?"
# Raccoglie l'input dell'utente.
read NAME
# Avvia l'istruzione 'bash if else' per verificare se $NAME corrisponde a "ATA".
if [ $NAME == "ATA" ]
 then
 # Pone una domanda successiva, questa volta per una password.
 echo "Password?"
 # Cattura l'input della password.
 read Password
   # 'Bash if else' annidato - Accerta se la $Password corrisponde a "pwd123".
   if [ "$Password" == "pwd123" ]; then
     # Visualizza un messaggio se entrambe le condizioni relative a nome e password sono soddisfatte.
     echo "You've successfully logged in as ATA."
   fi
fi
# Evidenzia la data e l'ora attuali.
date

3. Ora, vediamo questo script ‘bash if else’ in azione. Esegui il comando seguente:

bash bash_nested_if_demo.sh

Per risultati ottimali, inserisci ATA come nome utente e pwd123 come password.

Demonstrating the bash_nested_if_demo.sh Script in action

Se i tuoi inserimenti si discostano da “ATA” o “pwd123”, l’unico feedback che riceverai riguarda la data e l’ora attuali. Ciò è dovuto alla struttura ‘bash if else’ che richiede il soddisfacimento di entrambe le condizioni.

Validating if entered conditions are met using ‘bash if else’

Decodifica delle Dichiarazioni ‘Bash If Else’

Le dichiarazioni ‘bash if else’ sono pietre miliari nello scripting di Bash, fornendo capacità decisive ai tuoi script. Tuttavia, è cruciale comprendere che l’uso delle dichiarazioni ‘if’ non è privo di svantaggi.

Il problema evidente è che un eccessivo ricorso al ‘if’ può appesantire il tuo codice, rendendolo noioso e complesso, specialmente quando entrano in gioco molteplici dichiarazioni ‘if’ annidate. Tali script rischiano di diventare un “codice spaghetti”, caratterizzato da una ridotta leggibilità e una maggiore complessità.

Quindi, come puoi rendere più comprensibile il tuo script ‘bash if else’? Opta per le dichiarazioni ‘if else’ invece di un ammasso di ‘if’ annidati. La parola chiave ‘else’ offre il vantaggio di specificare un blocco di codice da eseguire nel caso in cui la condizione ‘if’ non sia soddisfatta.

Per una visione più chiara, considera la sintassi di ‘Bash If Else’ qui sotto, dove:

  • if [[ condizioni ]] – Qui, la dichiarazione ‘bash if else’ include il codice (dichiarazione1) che si attiva solo quando la condizione dichiarata è valida.
  • else – Questo fa parte della struttura ‘bash if else’. L’istruzione else comprende il codice (dichiarazione2) che viene eseguito quando la condizione nella precedente clausola if non è soddisfatta.
if [[ conditions ]]; then
	statement1
else
	statement2
fi

Immagina di creare un semplice gioco ‘bash if else’ in cui il sistema si aspetta un numero casuale dall’utente:

1. Inizia creando un nuovo file chiamato bash_if_else_demo.sh.

nano bash_if_else_demo.sh

2. Integra il successivo codice ‘bash if else’ nel tuo file bash_if_else_demo.sh, salva le modifiche e poi esci.

Il codice ‘bash if else’ sottostante chiede all’utente il suo numero fortunato. Se l’input è pari, visualizza il messaggio ‘Hai vinto!’. Altrimenti, un numero dispari attiva l’output ‘Hai perso!’.

#!/bin/bash
# Trasmette una richiesta per il numero fortunato dell'utente
echo -n "Input Your Lucky Number:"
# Accetta il numero inserito.
read var
# Condizione 'bash if else' per accertare se il valore è pari.
if [ $((var%2)) == 0 ]; then
 # Annuncia una vittoria se la condizione è soddisfatta
 echo "You Won with 'bash if else'!"
else
 # Annuncia una sconfitta se la condizione non è soddisfatta
 echo "You Lost using 'bash if else'!"
fi

3. Per vedere lo script ‘bash if else’ in azione, eseguire il comando seguente:

bash bash_if_else_demo.sh

Dopo aver inserito un numero pari, dovresti vedere il messaggio “Hai vinto con ‘bash if else’!”. Al contrario, inserire un numero dispari dovrebbe produrre il feedback “Hai perso usando ‘bash if else’!”.

Run the ‘bash if else’ game, bash_if_else_demo.sh Script

Per arricchire lo script ‘bash if else’, considera di incorporare un segmento che determina se l’utente inserisce una lettera o un carattere distinto invece di un numero.

Decodifica degli ‘If Else’ Bash e delle Dichiarazioni di Caso

A questo punto, hai esplorato un paio di metodi per prendere decisioni nei tuoi script Bash, ovvero le istruzioni ‘bash if else’. Ma Bash offre un’altra via per prendere decisioni: l’istruzione case.

Simile al ‘bash if else’, l’istruzione case è abile nel specificare sequenze di codice da eseguire in base a condizioni specificate. Un vantaggio notevole dell’istruzione case è la sua estrema concisione e chiarezza, specialmente quando confrontata con scenari ‘bash if else’ nidificati.

Per comprendere appieno l’alternativa del ‘bash if else’, approfondiamo la sintassi dell’istruzione case:

  • case $VAR in – Questo segmento della struttura case valuta la variabile $VAR rispetto ai pattern definiti fino a quando non viene trovata una corrispondenza.
  • pattern1) e pattern2) – Questi sono i criteri da testare e, una volta individuata una corrispondenza, il codice corrispondente (statement1 o statement2) entra in azione.
  • esac – Conclude la struttura case.
case $VAR in
pattern1)
    statement1
    ;;
pattern2)
    statement2
    ;;
esac

Immagina di progettare uno script ‘bash if else’ in cui gli utenti inseriscono i nomi dei loro paesi e, in risposta, lo script visualizza la lingua predominante di quel paese.

1. Inizia generando un file chiamato bash_case_demo.sh.

nano bash_case_demo.sh

2. Incorpora il codice ‘bash if else’ fornito di seguito nel tuo file bash_case_demo.sh, quindi salva ed esci.

Lo script ‘bash if else’ che ne deriva chiederà all’utente il nome del proprio paese e, in base ai pattern ‘case’, stamperà la lingua principale parlata nel paese menzionato.

3#!/bin/bash
# Interroga l'utente con una domanda sul suo paese di residenza
echo -n "In which country do you reside?"
# Cattura la risposta dell'utente.
read var
# Mostra la lingua standard nel paese selezionato dall'utente ($var),
# basandosi sui pattern all'interno della struttura 'case'.
echo -n "The official language of $var is "

# Lo statement 'bash if else' valuta se l'input dell'utente ($var) corrisponde ai pattern.
case $var in
# Definisci i pattern che rivelano la lingua principale del paese scelto dall'utente.
 US)
  echo -n "English"
  ;;

 Canada)
  echo -n "English and French"
  ;;

 Algeria | Bahrain | Egypt| Jordan)
  echo -n "Arabic"
  ;;

 *)
  echo -n "unknown"
  ;;
esac

3. Per sperimentare questo script ‘bash if else’ di persona, utilizza il comando successivo:

bash bash_case_demo.sh

Noterai che lo script evidenzia correttamente la lingua in base al paese scelto dall’utente.

Se il paese fornito non corrisponde ai pattern specificati, viene attivato il pattern (*) predefinito, con conseguente output “sconosciuto”.

Illustrating the functionality of the bash_case_demo.sh Script

Conclusione degli statement condizionali di Bash

In questa guida, hai intrapreso il viaggio per comprendere ‘bash if else’ e altri statement condizionali in Bash. Dalla semplice istruzione ‘if’ agli intricati statement ‘if-else’ e ‘case’, ora sei dotato degli strumenti essenziali per uno scripting Bash efficace.

Con queste basi del ‘bash if else’, puoi costruire script Bash in modo più efficiente, riducendo al minimo la possibilità di errori.

Ma ricorda, questo è solo la punta dell’iceberg. Bash offre una vasta gamma di istruzioni condizionali. Forse, considera di approfondire la dichiarazione elif di Bash e gli operatori &&, OR e || per una comprensione più approfondita. Con dedizione, padroneggiare lo scripting di Bash sarà presto alla portata!

Source:
https://adamtheautomator.com/bash-if-else/