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 stringaDefined
. - Righe 2-4 stampa le variabili sulla console. In questo momento,
outer_variable
contiene una stringa memorizzata, mentreinner_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 laouter_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 uscita0
. - 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 impostaa
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à.