GNU/Linux >> Linux Esercitazione >  >> Linux

Bash if elif else Statement:un tutorial completo

Introduzione

Gli script Bash aiutano ad automatizzare le attività sulla tua macchina. Il if elif else istruzione negli script bash consente di creare casi condizionali e risposte a risultati di codice specifici. Il if condizionale aiuta ad automatizzare un processo decisionale durante un programma.

Questo articolo spiega cosa è if elif else istruzione è e mostra la sintassi attraverso vari esempi.

Prerequisiti

  • Una macchina con sistema operativo Linux.
  • Accesso alla riga di comando/terminale.
  • Accesso a un editor di testo come Vi/Vim.

Cos'è l'istruzione Bash if?

In programmazione, il if istruzione è un'espressione condizionale. Tuttavia, il comando è stato testato in if l'istruzione viene valutata in base allo stato di uscita . Pertanto:

  • Se il comando viene completato con successo , lo stato di uscita è 0 .
  • Se l'istruzione genera un errore , lo stato di uscita è qualsiasi numero compreso tra 1 e 255 .

Lo zero per il successo e qualsiasi valore diverso da zero per il fallimento sembra controintuitivo. Nella maggior parte degli altri linguaggi di programmazione, zero rappresenta falso e uno (o maggiore) rappresenta vero. Tuttavia, nello scripting bash, la convenzione UNIX restituisce lo stato di uscita invece di un valore di verità e i due non devono essere confusi.

Testare un comando di errore di esempio (1 maggiore di 100) nel terminale eseguendo:

test 1 -gt 100

Verifica lo stato di uscita usando il comando echo:

echo $?

Il test restituisce un codice di uscita 1 , indicando che l'espressione non è riuscita.

Allo stesso modo, controlla un comando di esempio che valuta correttamente (1000 maggiore di 100) nel terminale con:

test 1000 -gt 100

Stampa lo stato di uscita per confermare che il comando è andato a buon fine:

echo $?

Il test restituisce un codice di uscita 0 , mostrando il comando completato senza errori.

Esempio di istruzione Bash if

Segui le istruzioni seguenti per creare uno script bash di esempio utilizzando un if dichiarazione.

1. Apri il terminale (CTRL +ALT +T ) e crea uno script di esempio per testare come bash if la dichiarazione funziona:

vi test_script.sh

2. Nello script, aggiungi le seguenti righe:

echo -n "Please enter a whole number: "
read VAR
echo Your number is $VAR
if test $VAR -gt 100
then
        echo "It's greater than 100"
fi
echo Bye!

Ciascuna riga dello script esegue le seguenti operazioni:

  • Righe 1-3 fornire istruzioni per inserire un numero tramite la console. Il numero viene letto in una variabile chiamata VAR e stampato.
  • Riga 4 avvia il if e controlla lo stato di uscita per il comando subito dopo ($VAR -gt 100 ).
  • Righe 5-6 segnala l'inizio dei comandi da eseguire solo se l'istruzione nella riga 4 viene completata correttamente (con uno stato di uscita 0), a significare che abbiamo inserito un numero maggiore di 100.
  • Riga 7 segnala la fine del if dichiarazione.
  • Riga 8 è al di fuori dell'istruzione e viene eseguito come previsto, indipendentemente da if risultato.

3. Salva e chiudi Vim:

:wq

4. Quindi, rendi eseguibile il file:

chmod +x test_script.sh

5. Infine, esegui lo script con:

./test_script.sh

Lo script emette un messaggio diverso in base al numero inserito. Esegui lo script più volte e verifica la presenza di altri numeri per confermare il comportamento.

Sintassi dell'istruzione Bash if

La sintassi di base per un bash if affermazione è:

if <commands>
then
        <commands>
fi

Ogni parola chiave ha una funzione specifica:

  • if segnala l'inizio della dichiarazione. Il comando subito dopo è quello in cui si applica il controllo dello stato di uscita.
  • then esegue i comandi solo se la revisione precedente è stata completata correttamente.
  • fi chiude l'istruzione if.

Racchiudendo il comando test tra parentesi diverse, si ottengono metodi di esecuzione diversi per if dichiarazione. La tabella seguente fornisce una breve descrizione e un caso d'uso per ciascun tipo di parentesi.

Sintassi Che cos'è Quando usarlo
if ( <commands> ) Subshell eseguita in un processo secondario. Quando i comandi influenzano la shell o l'ambiente corrente. Le modifiche non rimangono al termine della subshell.
if (( <commands> )) Estensione Bash. Utilizzare per operazioni aritmetiche e manipolazione di variabili in stile C.
if [ <commands> ] Integrato POSIX, alias per test <commands> . Confronto dei numeri e verifica dell'esistenza di un file.
if [[ <commands> ]] Estensione Bash, una versione avanzata delle parentesi quadre singole. Stringa che corrisponde a un modello di caratteri jolly.

Di seguito sono riportati esempi di script bash che utilizzano ciascun tipo di parentesi con una spiegazione più approfondita.

Sintassi tra parentesi singole

L'uso di parentesi singole negli script bash crea una subshell. Se combinato con if istruzione, il processo secondario termina prima di continuare il programma. Il if analizza lo stato di uscita e agisce di conseguenza.

Il bash if l'istruzione con la sintassi delle parentesi singole è simile alla seguente:

if ( <commands> )
then
        <commands>
fi

Prova l'esempio seguente per vedere come si comporta il processo secondario insieme a if dichiarazione:

1. Crea lo script usando Vim:

vi single_parentheses.sh

2. Aggiungi le seguenti righe di codice allo script:

outer_variable=Defined
echo Before if:
echo inner_variable = $inner_variable
echo outer_variable = $outer_variable
if (
        echo Inside subshell:
        inner_variable=Defined
        echo inner_variable = $inner_variable
        outer_variable=Changed
        echo outer_variable = $outer_variable
)
then
        echo After then:
        echo inner_variable = $iner_variable
        echo outer_variable = $outer_variable
fi
echo After fi:
echo inner_variable = $inner_variable
echo outer_variable = $outer_variable

Il programma esegue le seguenti operazioni:

  • Riga 1 crea una variabile chiamata outer_variable in cui memorizziamo una stringa Defined .
  • Righe 2-4 stampa le variabili sulla console. In questo momento, outer_variable contiene una stringa memorizzata, mentre inner_variable è vuoto.
  • Riga 5 avvia il if istruzione e un sottoprocesso, delimitato da singole parentesi.
  • Riga 6-11 memorizza una stringa all'interno della inner_variable e cambia la outer_variable a una stringa diversa. Entrambi i valori vengono stampati sulla console e il processo secondario termina con un codice di uscita. In questo caso, il processo secondario termina correttamente con un codice di uscita 0 .
  • Riga 12-16 eseguire dopo il processo secondario e stampare i valori delle variabili. Tuttavia, i valori tornano a quelli che erano prima del if dichiarazione. Il processo secondario memorizza i valori solo localmente e non globalmente.
  • Righe 16-19 esegui dopo i comandi in then clausola. I valori rimangono invariati al di fuori dell'estratto conto.

3. Salva lo script e chiudi l'editor:

:wq

4. Rendi eseguibile lo script:

chmod +x single_parentheses.sh

5. Infine, esegui l'esempio per testare i risultati:

./single_parentheses.sh

L'output stampa gli stati delle variabili durante l'avanzamento del programma.

Sintassi delle doppie parentesi

La sintassi delle doppie parentesi per un bash if affermazione è:

if (( <commands> ))
then
        <commands>
fi

Il costrutto delle doppie parentesi in bash consente:

  • Valutazione aritmetica . Definire una variabile come a=$(( 1+1 )) calcola l'equazione e imposta a a 2.
  • Manipolazione delle variabili in stile C. Ad esempio, aumentare le variabili con (( a++ )) .

Quando si utilizza la sintassi delle doppie parentesi in un if dichiarazione, la valutazione si comporta in modo diverso. Supponiamo che l'espressione restituisca 0 , quindi if il test non viene superato.

Prova il seguente esempio per vedere come funzionano le doppie parentesi:

1. Crea uno script bash nel terminale:

vi double_parentheses.sh

2. Aggiungi il seguente codice a double_parentheses.sh :

variable=-2
echo Before first if: $variable
if (( variable++ ))
then
        echo Incremented ++ style: $variable
fi
echo After first if: $variable
if (( variable=variable+1 ))
then
        echo Incremented arithmetically $variable
fi
echo After second if: $variable

Ciascun numero di riga nello script esegue le seguenti operazioni:

  • Riga 1 definisce una variabile e imposta il valore su -2 .
  • Righe 3-5 incrementa il valore C-style tra parentesi doppie e controlla il valore. Se la variabile non è zero, if stampa un messaggio sulla console.
  • Righe 8-10 incrementa la variabile di uno utilizzando la normale notazione aritmetica e stampa un messaggio se la variabile non è zero.

3. Salva lo script e chiudi Vim:

:wq

4. Modifica le autorizzazioni dello script in eseguibile:

chmod +x double_parentheses.sh

5. Esegui lo script per vedere i risultati:

./double_parentheses.sh

Sintassi a parentesi singola

La singola parentesi è un altro nome per il test comando e un'utilità POSIX standard disponibile per tutte le shell. La sintassi di base è:

if [ <commands> ]
then
        <commands>
fi

Il primo bash if esempio fornito in questo tutorial (test_script.sh ) funziona ugualmente bene con la sintassi alternativa:

echo -n "Please enter a whole number: "
read VAR
echo Your number is $VAR
if [ $VAR -gt 100 ]
then
        echo "It's greater than 100"
fi
echo Bye!

Eseguire lo script per confermare che l'output è equivalente. Per la documentazione completa e i dettagli sull'uso della sintassi delle parentesi, esegui il comando man sul test utilità:

man test

Sintassi a doppia parentesi

La sintassi tra parentesi quadre in bash if script è l'opzione migliore se la portabilità non è necessaria. Le doppie staffe sono superiori alle staffe singole e includono molte opzioni avanzate. La sintassi è:

if [[ <commands> ]]
then
        <commands>
fi

Prova l'esempio seguente per vedere come funziona la corrispondenza delle stringhe con caratteri jolly in un if comando:

1. Crea un file script di shell chiamato doppie_parentesi :

vi double_brackets.sh

2. Aggiungi il seguente codice:

if [[ $USER == k* ]]
then
        echo Hello $USER
fi
echo Bye!

3. Lo script controlla se la lettera iniziale del nome utente è k e invia un messaggio di saluto se lo è. Salva e chiudi lo script:

:wq

4. Rendi eseguibile il file con chmod:

chmod +x double_brackets.sh

5. Eseguire il programma con:

./double_brackets.sh

Altri tipi di istruzioni condizionali Bash

Il if istruzione esegue solo un controllo condizionale. Modifica il if con altri tipi di condizionali bash per creare valutazioni complesse.

se altro Dichiarazione

Il if else fornisce un metodo per definire diverse azioni in base all'output del condizionale verificato. La sintassi di base è:

if <command>
then
	<commands>
else
	<commands>
fi

L'esempio seguente mostra come il if else opere condizionali:

1. Crea un nuovo script usando Vim:

vi if_else.sh

2. Inserisci il seguente codice nello script:

echo -n "Please enter a whole number: "
read VAR
echo Your number is $VAR
if [ $VAR -gt 100 ]
then
        echo "It's greater than 100"
else
        echo "It's less than 100"
fi
echo Bye!

L'istruzione controlla l'output del comando nella riga 4 e stampa un messaggio descrittivo in base al risultato:

  • Se il numero inserito è maggiore di 100 , il programma entra nella riga 6 e stampa il messaggio.
  • Se il numero è meno di 100 , il messaggio in else clausola (riga 8 ) stampa sulla console.

3. Salva lo script e chiudi Vim:

:wq

4. Rendi eseguibile lo script:

chmod +x if_else.sh

5. Infine, esegui lo script più volte e verifica vari valori:

./if_else.sh

Dichiarazione if elif

Il elif clausola combinata con il if else istruzione crea più controlli condizionali. Il if elif crea una serie di controlli con risultati differenti. La sintassi è:

if <command>
then
        <commands>
elif <command>
then
        <commands>
else
        <commands>
fi

Per creare uno script utilizzando elif :

1. Crea un file di shell chiamato elif :

vi elif.sh

2. In elif.sh file, aggiungi il seguente codice di esempio:

echo -n "Please enter a whole number: "
read VAR
echo Your number is $VAR
if [ $VAR -gt 100 ]
then
        echo "It's greater than 100"
elif [ $VAR -lt 100 ]
then
        echo "It's less than 100"
else
        echo "It's exactly 100"
fi
echo Bye!

L'esempio aggiunge un elif controlla sulla riga 7 per vedere se il numero inserito è inferiore a 100. Se le affermazioni nelle righe 4 e 7 falliscono entrambe, il programma passa alla clausola else.

3. Salva e chiudi il file:

:wq

4. Crea elif.sh file eseguibile:

chmod +x elif.sh

5. Esegui lo script più volte e controlla il comportamento per numeri diversi:

./elif.sh

Aggiungi più elif clausole di diramazione del prospetto per ulteriori verifiche di dettaglio. Per i casi in cui if e elif serie di pattern cresce, l'opzione migliore è utilizzare un case dichiarazione.

Dichiarazione nidificata se

if nidificato le istruzioni aggiungono un ramo all'interno di if . In particolare, quando un comando supera il primo controllo se, passa attraverso un nuovo controllo per filtrare ulteriormente il risultato. La sintassi è:

if <commands>
then
        if <commands>
        then
                <commands>
        fi
fi

L'if annidato viene comunemente utilizzato per eseguire ricerche in array multidimensionali. Tuttavia, cerca di evitare di avere più di due o tre if nidificati istruzioni per ridurre la complessità del programma. Ripensa alla logica del codice quando viene nidificato if continua a crescere in profondità.


Linux
  1. Un tutorial per il completamento di Bash facile??

  2. Esercitazione sullo stato di uscita di Bash Shell con esempi pratici

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

  4. Bash/sh istruzione 'if else'

  5. C'è un'istruzione goto in bash?

Comando di uscita Bash e codici di uscita

Bash Scripting Tutorial per principianti

Bash Heredoc Tutorial per principianti

Bash Scripting – Case Statement

Bash If Else Sintassi con esempi

Comprendere Bash If Else e altre dichiarazioni condizionali