GNU/Linux >> Linux Esercitazione >  >> Linux

Comprendere Bash If Else e altre dichiarazioni condizionali

Se hai mai scritto uno script Bourne Again Shell (Bash), sai che possono diventare rapidamente complessi man mano che aggiungi più logica. Come evitare di rovinare i tuoi script? Le istruzioni condizionali, come Bash se altro, sono un modo per aggiungere logica, consentendo al tuo script di prendere decisioni in base a determinate condizioni.

In questo tutorial imparerai come utilizzare le istruzioni if-else e case di Bash per scrivere uno script Bash privo di errori. Tutto questo con alcune best practice per la scrittura di script Bash.

Pronto? Continua a leggere e porta il tuo scripting Bash al livello successivo!

Prerequisiti

Questo tutorial sarà una dimostrazione pratica. Se vuoi seguire, assicurati di averlo

  • Un sistema Linux o Windows con Bash installato:il sottosistema Windows per Linux (WSL) è un'opzione eccellente per gli utenti Windows.
  • Un editor di codice/testo.

Perché utilizzare le dichiarazioni condizionali?

Le istruzioni condizionali sono uno degli strumenti più importanti nello scripting Bash in quanto ti consentono di prendere decisioni nei tuoi script in base a determinate condizioni.

Ad esempio, puoi utilizzare un'istruzione condizionale per verificare se un file esiste prima di provare a eliminarlo. Oppure potresti usarne uno per verificare se un utente ha il permesso di accedere a una determinata risorsa.

Le istruzioni condizionali rendono i tuoi script più flessibili e potenti. Immagina di scrivere uno script per eliminare tutti i file in una directory. Con un'istruzione condizionale, puoi eliminare file più vecchi di 30 giorni.

Comprendere la dichiarazione IF

Basta con l'introduzione allo script Bash e sporcarsi le mani. Dai un'occhiata più da vicino a una delle istruzioni condizionali più popolari, il if dichiarazione.

Il if istruzione è il modo più semplice per aggiungere condizionali ai tuoi script Bash, con la seguente sintassi:

  • A partire dalla parola chiave if, specifichi le [[condizioni]] da soddisfare. Il codice all'interno dell'istruzione if viene quindi eseguito e l'istruzione termina con la parola chiave fi.
  • La parola chiave then separa la condizione dal codice (istruzione) che verrà eseguito se la condizione viene soddisfatta. Questo codice può essere lungo più righe se aggiungi un punto e virgola (;) come separatore di riga.
if [[ condition ]]; then
	statement
fi

Supponiamo che tu stia creando uno script che richiede il nome utente corretto per il tuo sistema prima di accedere:

1. Apri il tuo terminale e crea un nuovo bash_if_demo.sh file utilizzando il tuo editor di testo preferito.

nano bash_if_demo.sh

2. Copia e incolla il seguente codice nel tuo bash_if_demo.sh file, salva le modifiche e chiudi il file.

Il codice sottostante richiede un nome utente e, se viene inserito quello corretto, il codice stampa un messaggio di "bentornato" insieme alla data e all'ora correnti.

Puoi registrare la data e l'ora in cui l'utente sta tentando di accedere al sistema per ulteriori analisi.

La prima riga #!/bin/bash (shebang) dice al sistema quale interprete utilizzare per eseguire il resto del codice nel file. In questo caso, stai usando bash.

#!/bin/bash
# Prints a question to the screen.
echo "Whats your name?"
# Reads keyboard input and stores it in the $NAME variable
read NAME
# Starts the if statement - checks to see if the $NAME variable's value 
# is equal to ATA. If it is, the code inside runs. Otherwise, the code will not run.
if [ $NAME == "ATA" ]
then
	# Prints a message to the screen, only if the value stored in the $NAME variable 
	# is equal to ATA.
  echo "Welcome back ATA!"
fi
# Prints the current date and time to the screen. Since this line is outside 
# of the if statement, it always runs regardless of the $NAME variable's value.
date

3. Infine, esegui il comando seguente per eseguire lo script bash_if_demo.sh per vedere cosa fa.

bash bash_if_demo.sh

Nota che qualunque shell Bash stai usando, devi aggiungere bash prima del nome dello script, in modo che il sistema utilizzi Bash per eseguire il tuo codice.

Inserisci ATA, quindi premi Invio e vedrai il seguente output.

Non riceverai il messaggio di benvenuto se inserisci qualcosa di diverso da "ATA.", solo la data e l'ora correnti. Come mai? Perché la tua istruzione if sta verificando il valore esatto di quello memorizzato nella variabile $NAME.

Si noti che le istruzioni if ​​fanno distinzione tra maiuscole e minuscole. Quindi, "ata", "aTa", "Ata" ecc. non sono la stessa cosa di "ATA".

Testare il codice con input diversi è una procedura consigliata per assicurarsi che il codice si comporti come previsto.

Comprendere le dichiarazioni Nested If

Hai appena imparato le basi della scrittura di istruzioni if, e questo è abbastanza buono se non stai scrivendo un codice complesso. Ma se lo fai, prova a scrivere un'istruzione if annidata per espandere le tue dichiarazioni condizionali. Un'istruzione if annidata è un'istruzione if che contiene una o più istruzioni if.

Di seguito è riportata la sintassi di base per le istruzioni nidificate if, dove:

  • if [[ conditions ]] – Il if esterno istruzione contenente codice che viene eseguito solo se la condizione è soddisfatta. In questo caso, un altro if dichiarazione).
  • if [[ condition2 ]] – Il if interno istruzione contenente codice che viene eseguito solo se vengono soddisfatte entrambe le condizioni.
if [[ conditions

]]; then
	if [[ condition2 ]]; then
		statement
	fi
fi

Migliorare il codice precedente impostando un if dichiarazione che richiede una password:

1. Crea un nuovo file chiamato bash_nested_if_demo.sh con il tuo editor di testo.

nano bash_nested_if_demo.sh

2. Compila il codice seguente in bash_nested_if_demo.sh file, salva le modifiche e chiudi il file.

Il codice sottostante richiede un nome e una password. Se entrambe le condizioni sono soddisfatte per il nome e la password, il codice stampa un messaggio. In caso contrario, il codice non stamperà alcun messaggio a parte la data e l'ora correnti.

#!/bin/bash
# Prints a message asking for a name.
echo "Whats your name?"
# Reads input from the keyboard.
read NAME
# Check if the $NAME variable's value is equal to "ATA."
if [ $NAME == "ATA" ]
 then
 # Prints a message asking for a password.
 echo "Password"
 # Reads input from the keyboard.
 read Password
   # Nested if statement - Check if the $Password variable's value equals "pwd123."
   if [ "$Password" == "pwd123" ]; then
     # Prints a message if both conditions for name and password are met.
     echo "You logged in as ATA"
   fi
fi
# Prints the current date and time
date

3. Infine, esegui il comando seguente per eseguire bash_nested_if_demo.sh copione.

bash bash_nested_if_demo.sh

Inserisci ATA per il nome e pwd123 per la password.

Se inserisci qualcosa di diverso da "ATA" o "pwd123", l'unico messaggio che riceverai sarà la data e l'ora correnti. Come mai? Entrambe le condizioni nelle tue istruzioni nidificate if devono essere soddisfatte.

Comprendere le dichiarazioni IF ELSE

L'istruzione if è uno strumento potente e comunemente usato negli script Bash. se le dichiarazioni possono aiutare a prendere decisioni nei tuoi script. Ma vale la pena notare che ci sono alcuni svantaggi nell'usare le istruzioni if.

Lo svantaggio principale è che le istruzioni if ​​possono rendere difficile la lettura e la manutenzione del codice, specialmente se hai annidato istruzioni if ​​all'interno di altre istruzioni if. Questo stile di scripting può portare a quello che è noto come "codice spaghetti", difficile da leggere e capire.

Quindi, come fai a rendere il tuo codice non complicato? Usa le istruzioni if ​​else invece di un gruppo di istruzioni if ​​annidate. La parola chiave else consente di specificare il codice che verrà eseguito se la condizione nell'istruzione if non viene soddisfatta.

Esamina la sintassi dell'istruzione IF ELSE di seguito, dove:

  • if [[ conditions ]] – Il if istruzione, che contiene il codice (statement1 ) che verrà eseguito se la condizione è soddisfatta.
  • else – Il else contiene il codice (statement2 ) che verrà eseguito se la condizione nel if dichiarazione non è soddisfatta.
if [[ conditions ]]; then
	statement1
else
	statement2
fi

Supponiamo che tu stia creando un gioco di numeri, che accetta un numero casuale come input dall'utente:

1. Crea un nuovo file chiamato bash_if_else_demo.sh.

nano bash_if_else_demo.sh

2. Aggiungi il seguente codice al tuo bash_if_else_demo.sh file, salva le modifiche e chiudi il file.

Il codice seguente stampa un messaggio che richiede il numero fortunato dell'utente e stampa il messaggio Hai vinto se l'input dell'utente è un numero pari. In caso contrario (altrimenti), il codice stampa il messaggio You Lost se l'inserimento dell'utente è un numero dispari.

#!/bin/bash
# Prints a message asking for the user's lucky number
echo -n "Enter You Lucky Number:"
# Reads the keyboard input.
read var
# Checks if the value is an even number.
if [ $((var%2)) == 0 ]; then
 # Prints a message if the condition is met
 echo "You Won!"
else
 # Prints a message if the condition is not met
 echo "You Lost!"
fi

3. Ora esegui il seguente comando per eseguire lo script bash_if_else_demo.sh.

bash bash_if_else_demo.sh

Se inserisci un numero pari, viene visualizzato il messaggio "Hai vinto!" stampe, come puoi vedere di seguito. Ma se inserisci un numero dispari, il messaggio "Hai perso!" stampa invece.

Prova a migliorare il tuo codice aggiungendo un'altra istruzione che controlla se l'utente inserisce invece una lettera di un carattere speciale.

Comprendere le dichiarazioni del caso

Finora, hai esaminato due modi per prendere decisioni nei tuoi script Bash:if dichiarazioni e else dichiarazioni. Ma c'è un altro modo per prendere decisioni nei tuoi script, il case dichiarazione.

Il case è simile al if istruzione in quanto consente di specificare il codice che verrà eseguito in base a una condizione. Ma la cosa buona dell'istruzione case è che avrai una sintassi più precisa e concisa rispetto al if annidato dichiarazione.

La sintassi per l'istruzione case è la seguente dove:

  • case $VAR in – Il case istruzione che accetta il $VAR la variabile verifica i modelli specificati finché non viene trovata una corrispondenza.
  • pattern1) e pattern2) -I modelli da testare, che esegue il codice (statement1 o statement2 ) una volta trovato un modello.
  • esac – Termina la dichiarazione del caso.
case $VAR in
pattern1)
    statement1
    ;;
pattern2)
    statement2
    ;;
esac

Supponiamo di aver bisogno di uno script che chieda agli utenti di inserire i nomi dei loro paesi e di rispondere con un messaggio che mostra la lingua parlata in quel paese.

1. Crea un nuovo file chiamato bash_case_demo.sh.

nano bash_case_demo.sh

2. Compila il codice seguente in bash_case_demo.sh file, salva le modifiche e chiudi il file.

Il codice seguente richiede all'utente il nome di un paese e stampa la lingua ufficiale di quel paese in base agli schemi in una dichiarazione del caso.

3#!/bin/bash
# Prints a message asking for the user's country name
echo -n "Enter the Country You Live In:"
# Reads keyboard input.
read var
# Prints a message showing the official language in the user's country ($var)
# based on the pattern in the case statement.
echo -n "The official language of $var is "

# Case statement - checks if the user's input ($var) matches the patterns.
case $var in
# Define patterns that print the user's country's official language.
 US)
  echo -n "English"
  ;;

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

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

 *)
  echo -n "unknown"
  ;;
esac

3. Infine, esegui il comando seguente per eseguire lo script bash_case_demo.sh.

bash bash_case_demo.sh

Di seguito, puoi vedere che viene stampata la lingua ufficiale appropriata in base al paese inserito dall'utente.

Se il paese inserito non corrisponde a nessuno dei modelli, viene utilizzato il modello predefinito (*) e viene stampato il messaggio sconosciuto.

Conclusione

In questo tutorial, hai fatto i primi passi per imparare a usare le istruzioni condizionali in Bash. Hai imparato a semplificare il codice complesso con l'istruzione if di Bash, l'istruzione if-else e l'istruzione case.

Ora sei abbastanza sicuro da usare le istruzioni condizionali per scrivere script Bash in modo più efficiente e con meno errori.

Ma non fermarti qui! Ci sono più cose che le dichiarazioni condizionali in Bash possono offrire. Forse inizia a conoscere l'istruzione Bash elif e &&, OR e || operatori? Con un po' di pratica, scriverai script Bash come un professionista in pochissimo tempo!


Linux
  1. Come utilizzare l'istruzione if else condizionali nello script Bash

  2. 2>&1 e la comprensione di altri modi di dire di script di shell

  3. Capire Tc Qdisc e Iperf?

  4. 4 Esempi di istruzioni Awk If ( if, if else, if else if, :? )

  5. 4 Esempi di istruzioni Bash If ( If then fi, If then else fi, If elif else fi, Nested if )

Comando di uscita Bash e codici di uscita

Bash Scripting – Dichiarazioni condizionali

Bash Scripting – Case Statement

Come utilizzare le istruzioni condizionali negli script Bash

Bash If Else Sintassi con esempi

Bash Beginner Series #7:Decision Making With If Else e Case Statements