Questo articolo copre i fondamenti dello scripting della shell Bash e descrive i costrutti logici più utilizzati, incluso il singolo if dichiarazione, se-altro dichiarazione e elif dichiarazione. Oltre a questo, tratteremo il modo corretto di confrontare stringhe e numeri. Migliora la tua esperienza con la shell Linux in 5 minuti!
Ogni volta che sei un amministratore di sistema esperto o un utente Linux principiante, vale la pena conoscere i fondamenti dello scripting della shell. Questa abilità ti dà la possibilità di automatizzare le attività ripetibili all'interno di uno o più server. Di solito, tali attività includono l'installazione del software e la configurazione di qualsiasi servizio di sistema.
Dichiarazione If
se istruzione funge da nucleo fondamentale per tutti i linguaggi di programmazione. Questa istruzione aiuta a implementare la logica decisionale all'interno del programma o di uno script. Ecco perché è importante capire come utilizzare i vari se dichiarazioni.
Ecco la sintassi di base:
if [ condition ]
then
COMMANDS
fi
Dove:
- condizione – è l'operatore logico di se dichiarazione.
- COMANDI – comandi, che vengono eseguiti quando la condizione è true .
- se, allora, fi – sono parole chiave sintattiche.
Ecco un elenco degli operatori delle condizioni di test più utilizzati:
Operatore | Descrizione |
---|---|
! ESPRESSIONE | L'ESPRESSIONE è falsa. |
-n STRINGA | La lunghezza di STRING è maggiore di zero.Text |
-z STRINGA | La lunghezza di STRING è zero (la STRING è vuota) |
STRINGA1 =STRINGA2 | STRING1 è uguale a STRING2 |
STRINGA1 !=STRINGA2 | STRING1 non è uguale a STRING2 |
INTERO1 -eq INTEGER2 | INTEGER1 è numericamente uguale a INTEGER2 |
INTEGER1 -gt INTEGER2 | INTEGER1 è numericamente maggiore di INTEGER2 |
INTERO1 -lt INTEGER2 | INTEGER1 è numericamente inferiore a INTEGER2 |
-e FILE | FILE esiste |
-d FILE | FILE esiste ed è una directory |
-s FILE | FILE esiste e la sua dimensione è maggiore di zero (FILE non è vuoto. |
-w FILE | FILE esiste e l'autorizzazione di scrittura è concessa. |
-x FILE | FILE esiste e l'autorizzazione di esecuzione è concessa. |
-r FILE | FILE esiste e l'autorizzazione di lettura è concessa. |
La cosa più interessante è che durante l'esecuzione dello script Bash tutto in [ ] viene superato il test utility, che restituisce true o falso . Quindi, se dimentichi la sintassi dell'operatore, usa la sua pagina man:
man test
Diamo un'occhiata al più semplice se esempio di istruzione:
#!/bin/bash
var=2
if [ $var -eq 2 ]
then
echo "var equals 2"
fi
Uscita prevista:
var equals 2
Nell'esempio sopra, impostiamo la variabile var valore a 2 , quindi abbiamo verificato se la var valore è uguale a (-eq ) 2 e stampato il messaggio.
Nella vita reale, di solito utilizziamo if istruzioni in combinazione con i costrutti di loop Bash (for-loops, while-loops, until-loops). Ecco un esempio di utilizzo di se dichiarazione con per -ciclo:
#!/bin/bash
for var in 1 2 3 4 5
do
if [ $var -eq 3 ]
then
echo "Value 3 found"
break
fi
echo var=$var
done
Uscita prevista:
var=1
var=2
Value 3 found
In questo esempio, stiamo esaminando l'elenco di numeri da 1 a 5 nella sezione per -loop e stampa il valore della variabile, che abbiamo appena elaborato. Quando viene trovato il valore 3, stiamo interrompendo l'esecuzione dello script.
Oltre agli esempi precedenti, puoi utilizzare il risultato di calcoli matematici in if dichiarazione:
#!/bin/bash
for var in {1..10}
do
if (( $var % 2 == 0 ))
then
echo "$var is even number"
fi
done
Nell'esempio sopra stiamo controllando i numeri pari nell'intervallo tra 1 e 10 .
Uscita prevista:
2 is even number
4 is even number
6 is even number
8 is even number
10 is even number
Ora puoi controllare l'output di un comando Bash o il risultato dell'esecuzione. Proviamo a verificare che l'utente esista in /etc/passwd file.
#!/bin/bash
user='root'
check_result=$( grep -ic "^$user" /etc/passwd )
if [ $check_result -eq 1 ]
then
echo "$user user found"
fi
Nell'esempio sopra stiamo usando grep comando per cercare in /etc/passwd file:
grep -ic "^$user" /etc/passwd
Dove:
- -i – ricerca senza distinzione tra maiuscole e minuscole.
- -c – restituisce il numero di righe trovate (0 – niente trovato; 1 o più quando è stato trovato qualcosa).
- "^$utente" – cerca la stringa che inizia (^ ) dal valore di $user variabile.
Tutto il resto nell'esempio dovrebbe essere chiaro.
Uscita prevista:
root user found
Quindi, controlliamo che /etc/passwd il file esiste:
#!/bin/bash
file='/etc/passwd'
if [ -s $file ]
then
echo "$file file found"
fi
Uscita prevista:
File/etc/passwd file found
Dichiarazione If-else
Dopo aver acquisito familiarità con il se di base dichiarazione, diamo un'occhiata a come utilizzare Bash if-else dichiarazione.
Ecco la sintassi generale:
if [ condition ]
then
TRUE_COMMANDS
else
FALSE_COMMANDS
fi
Dove:
- condizione – è l'operatore logico di se dichiarazione.
- VERI_COMANDI – comandi, che vengono eseguiti se la condizione è vera.
- FALSI_COMANDI – comandi, che vengono eseguiti se la condizione è falsa.
- se, allora, altrimenti, fi – sono parole chiave sintattiche.
Per dimostrare come funziona, cambiamo un esempio, in cui abbiamo rilevato numeri pari. Ora, stampiamo quale numero è pari e quale è dispari:
#!/bin/bash
for var in {1..10}
do
if (( $var % 2 == 0 ))
then
echo "$var is even number"
else
echo "$var is odd number"
fi
done
Ecco un output previsto:
1 is odd number
2 is even number
3 is odd number
4 is even number
5 is odd number
6 is even number
7 is odd number
8 is even number
9 is odd number
10 is even number
Dichiarazione Elif
Ora, cosa succede se dobbiamo controllare diverse condizioni durante l'esecuzione dello script? Ciò è possibile anche utilizzando l'istruzione elif, che è una scorciatoia di "else if ”.
Ecco come appare la sintassi:
if [ condition_1 ]
then
CONDITION_1_COMMANDS
elif [ condition_2 ]
then
CONDITION_2_COMMANDS
else
ALL_OTHER_COMMANDS
fi
Dove:
- condizione_1 – è la condizione logica da eseguire CONDITION_1_COMMANDS .
- CONDITION_1_COMMANDS – comandi, che vengono eseguiti se la condizione_1 è vero .
- CONDITION_2_COMMANDS – comandi, che vengono eseguiti se la condizione_2 è vero .
- TUTTI I_ALTRI_COMANDI – comandi, che vengono eseguiti quando condizione_1 e condizione_2 sono falsi .
- se, allora, elif, altrimenti, fi – sono parole chiave sintattiche.
Diamo un'occhiata al seguente esempio:
#/bin/bash
time=8
if [ $time -lt 10 ]
then
echo "Good morning"
elif [ $time -lt 20 ]
then
echo "Good day"
else
echo "Good evening"
fi
In questo esempio impostiamo un orario variabile a 8 AM e ha stampato un messaggio in base al valore dell'ora.
Uscita prevista:
Good morning
Nidificazione delle dichiarazioni if
Ora, quando avremo acquisito familiarità con le basi, possiamo concludere questo argomento imparando come annidare le istruzioni if.
Ecco un esempio:
#/bin/bash
value=5
if [ $value -lt 10 ]
then
if [ $value -eq 5 ]
then
echo "Value equals 5"
else
echo "Value not equals 5"
fi
else
echo "value is greater than 10"
fi
Ecco un output previsto:
Value equals 5
Operatori booleani
Potrebbe essere utile controllare diverse condizioni in un unico se dichiarazione. Puoi farlo utilizzando i seguenti operatori booleani:
- && – AND logico.
- || – OR logico.
Ecco un rapido esempio:
#!/bin/bash
username="andrei"
birthday="12/16"
today=$( date +"%m/%d")
if [ $USER = $username ] && [ $today = $birthday ]
then
echo "Happy birthday\!"
fi
In questo semplice esempio stiamo verificando che due condizioni siano vere:
- Il nome utente dell'utente che ha effettuato l'accesso deve essere uguale a andrei.
- La data di oggi dovrebbe essere il 16 dicembre.
Se entrambe le condizioni sono vere, stiamo stampando "'Buon compleanno!"
Dichiarazione del caso
In alcune situazioni potrebbe essere necessario avere più di 3 istruzioni elif per controllare il tuo script. In questo caso, l'utilizzo di un'istruzione elif diventa complicato. Bash ti offre un modo migliore per gestire tali situazioni utilizzando un caso dichiarazione.
Ecco la sintassi:
case VARIABLE in
VALUE_1)
COMMANDS_FOR_VALUE_1
;;
VALUE_2)
COMMANDS_FOR_VALUE_2
;;
*)
DEFAULT_COMMANDS
;;
esac
Dove:
- VARIABILE – la variabile il cui valore verrà confrontato con VALUE_1 o VALUE_2 .
- COMANDI_FOR_VALUE_1 – comandi da eseguire quando VARIABILE il valore è uguale a VALUE_1 .
- COMANDI_FOR_VALUE_2 – comandi da eseguire quando VARIABILE il valore è uguale a VALUE_2 .
- COMANDI_DEFAULT – comandi da eseguire quando VARIABILE il valore non era uguale a una delle condizioni superiori.
- caso , in , esac – parole chiave sintattiche.
Ecco lo schema molto comune per elaborare l'input nello script e avviare, interrompere o riavviare il servizio in base all'utente input:
#!/bin/bash
case $1 in
start)
echo "Starting the service"
;;
stop)
echo "Stopping the service"
;;
restart)
echo "Restarting the service"
;;
*)
echo "Unknown action"
;;
esac
In questo esempio stiamo controllando il valore dello speciale $1 Variabile Bash. Contiene il primo argomento, fornito a uno script. Ad esempio, se salvi l'esempio sopra in un file service.sh ed eseguilo in questo modo:
bash service.sh start
$ 1 conterrà la parola "inizio" come valore.
Il resto è gestito dalla logica dell'istruzione case.
Riepilogo
In questo articolo abbiamo trattato i fondamenti dello scripting della shell Bash e descritto i costrutti logici più utilizzati, incluso il singolo if dichiarazione, se-altro dichiarazione e elif dichiarazione.
Ci auguriamo che tu abbia trovato utile questo articolo. Se sì, per favore, per favore, aiutaci a diffonderlo nel mondo!