Lo scripting della shell è una parte importante dell'automazione dei processi in Linux. Lo scripting ti aiuta a scrivere una sequenza di comandi in un file e quindi eseguirli.
Questo ti fa risparmiare tempo perché non devi scrivere determinati comandi ancora e ancora. Puoi eseguire le attività quotidiane in modo efficiente e persino programmarle per l'esecuzione automatica.
Puoi anche impostare determinati script da eseguire all'avvio, ad esempio la visualizzazione di un messaggio particolare all'avvio di una nuova sessione o l'impostazione di determinate variabili di ambiente.
Le applicazioni e gli usi dello scripting sono numerosi, quindi tuffiamoci.
In questo articolo imparerai:
- Cos'è una shell bash?
- Cos'è uno script bash e come lo identifichi?
- Come creare il tuo primo script bash ed eseguirlo.
- La sintassi di base degli script di shell.
- Come visualizzare gli script pianificati di un sistema.
- Come automatizzare gli script pianificando tramite cron job.
Il modo migliore per imparare è esercitarsi. Ti incoraggio vivamente a seguire usando Replit. Puoi accedere a una shell Linux in esecuzione in pochi minuti.
Introduzione a Bash Shell
La riga di comando di Linux è fornita da un programma chiamato shell. Nel corso degli anni, il programma shell si è evoluto per soddisfare varie opzioni.
Utenti diversi possono essere configurati per utilizzare shell diverse. Ma la maggior parte degli utenti preferisce rimanere con l'attuale shell predefinita. La shell predefinita per molte distribuzioni Linux è la GNU Bourne-Again Shell (bash). A Bash succede la shell Bourne (sh
).
Quando avvii per la prima volta la shell, utilizza uno script di avvio che si trova in .bashrc
o .bash_profile
file che consente di personalizzare il comportamento della shell.
Quando una shell viene utilizzata in modo interattivo, mostra un $
quando è in attesa di un comando dall'utente. Questo è chiamato prompt della shell.
[username@host ~]$
Se la shell è in esecuzione come root, il prompt viene modificato in #
. Il prompt della shell del superutente è simile al seguente:
[root@host ~]#
Bash è molto potente in quanto può semplificare alcune operazioni difficili da eseguire in modo efficiente con una GUI. Ricorda che la maggior parte dei server non ha una GUI ed è meglio imparare a usare i poteri di un'interfaccia a riga di comando (CLI).
Cos'è uno script Bash?
Uno script bash è una serie di comandi scritti in un file. Questi vengono letti ed eseguiti dal programma bash. Il programma viene eseguito riga per riga.
Ad esempio, puoi navigare verso un determinato percorso, creare una cartella e generare un processo al suo interno usando la riga di comando.
Puoi eseguire la stessa sequenza di passaggi salvando i comandi in uno script bash ed eseguendolo. Puoi eseguire lo script un numero qualsiasi di volte.
Come si identifica uno script Bash?
Estensione del file di .sh
.
In base alle convenzioni di denominazione, gli script bash terminano con un .sh
. Tuttavia, gli script bash possono funzionare perfettamente senza sh
estensione.
Gli script iniziano con un bash bang.
Gli script sono anche identificati con un shebang
. Shebang è una combinazione di bash #
e bang !
ha seguito il percorso della shell bash. Questa è la prima riga dello script. Shebang dice alla shell di eseguirla tramite bash shell. Shebang è semplicemente un percorso assoluto per l'interprete bash.
Di seguito è riportato un esempio della dichiarazione shebang.
#! /bin/bash
Il percorso del programma bash può variare. Vedremo più avanti come identificarlo.
Diritti di esecuzione
Gli script hanno diritti di esecuzione per l'utente che li esegue.
Un diritto di esecuzione è rappresentato da x
. Nell'esempio seguente, il mio utente ha il rwx
(lettura, scrittura, esecuzione) diritti per il file test_script.sh
Colore file
Gli script eseguibili vengono visualizzati in un colore diverso dal resto dei file e delle cartelle.
Nel mio caso, gli script con diritti di esecuzione vengono visualizzati in verde.
Come creare il tuo primo script Bash
Creiamo un semplice script in bash che produca Hello World
.
Crea un file chiamato hello_world.sh
touch hello_world.sh
Trova il percorso della tua shell bash.
which bash
Nel mio caso, il percorso è /usr/bin/bash
e lo includerò nello shebang.
Scrivi il comando.
Faremo echo
"ciao mondo" alla console.
Il nostro script sarà simile a questo:
#! usr/bin/bash
echo "Hello World"
Modifica il file hello_world.sh
utilizzando un editor di testo a tua scelta e aggiungi le righe precedenti al suo interno.
Fornisci i diritti di esecuzione al tuo utente.
Modifica i permessi del file e consenti l'esecuzione dello script utilizzando il comando seguente:
chmod u+x hello_world.sh
chmod
modifica i diritti esistenti di un file per un particolare utente. Stiamo aggiungendo +x
all'utente u
.
Esegui lo script.
Puoi eseguire lo script nei seguenti modi:
./hello_world.sh
bash hello_world.sh
.
Ecco l'output:
La sintassi di base dello scripting Bash
Proprio come qualsiasi altro linguaggio di programmazione, lo scripting bash segue una serie di regole per creare programmi comprensibili dal computer. In questa sezione studieremo la sintassi dello scripting bash.
Come definire le variabili
Possiamo definire una variabile usando la sintassi variable_name=value
. Per ottenere il valore della variabile, aggiungi $
prima della variabile.
#!/bin/bash
# A simple variable example
greeting=Hello
name=Tux
echo $greeting $name
Tux è anche il nome della mascotte di Linux, il pinguino.
Espressioni aritmetiche
Di seguito sono riportati gli operatori supportati da bash per i calcoli matematici:
Operatore | Utilizzo |
---|---|
+ | aggiunta |
- | sottrazione |
* | moltiplicazione |
/ | divisione |
** | esponenziale |
% | modulo |
Facciamo alcuni esempi.
Le espressioni numeriche possono anche essere calcolate e memorizzate in una variabile utilizzando la sintassi seguente:
var=$((expression))
Proviamo un esempio.
#!/bin/bash
var=$((3+9))
echo $var
Le frazioni non vengono calcolate correttamente utilizzando i metodi precedenti e troncate.
Per calcoli decimali , possiamo usare bc
comando per ottenere l'output su un determinato numero di cifre decimali. bc
(Bash Calculator) è un calcolatore da riga di comando che supporta il calcolo fino a un certo numero di punti decimali.
echo "scale=2;22/7" | bc
Dove scale
definisce il numero di cifre decimali richieste nell'output.
Come leggere l'input dell'utente
A volte è necessario raccogliere l'input dell'utente ed eseguire operazioni pertinenti.
In bash, possiamo accettare l'input dell'utente usando read
comando.
read variable_name
Per richiedere all'utente un messaggio personalizzato, usa il -p
bandiera.
read -p "Enter your age" variable_name
Esempio:
#!/bin/bash
echo "Enter a numner"
read a
echo "Enter a numner"
read b
var=$((a+b))
echo $var
Operatori logici di confronto numerico
Il confronto viene utilizzato per verificare se le istruzioni restituiscono true
o false
. Possiamo utilizzare gli operatori mostrati di seguito per confrontare due affermazioni:
Operazione | Sintassi | Spiegazione |
---|---|---|
Uguaglianza | num1 -eq num2 | è num1 uguale a num2 |
Maggiore di uguale a | num1 -ge num2 | è num1 maggiore di uguale a num2 |
Maggiore di | num1 -gt num2 | è num1 maggiore di num2 |
Inferiore a | num1 -le num2 | è num1 minore di uguale a num2 |
Meno di | num1 -lt num2 | è num1 minore di num2 |
Diverso da | num1 -ne num2 | è num1 diverso da num2 |
Sintassi :
if [ conditions ]
then
commands
fi
Esempio :
Confrontiamo due numeri e troviamo la loro relazione:
read x
read y
if [ $x -gt $y ]
then
echo X is greater than Y
elif [ $x -lt $y ]
then
echo X is less than Y
elif [ $x -eq $y ]
then
echo X is equal to Y
fi
Uscita:
Dichiarazioni condizionali (processo decisionale)
Le condizioni sono espressioni che restituiscono un'espressione booleana (true
o false
). Per verificare le condizioni, possiamo utilizzare if
, if-else
, if-elif-else
e condizionali nidificati.
La struttura delle istruzioni condizionali è la seguente:
if...then...fi
dichiarazioniif...then...else...fi
dichiarazioniif..elif..else..fi
if..then..else..if..then..fi..fi..
(Condizionali nidificati)
Sintassi :
if [[ condition ]]
then
statement
elif [[ condition ]]; then
statement
else
do this by default
fi
Per creare confronti significativi, possiamo usare AND -a
e OPPURE -o
anche.
L'istruzione seguente si traduce in:If a
è maggiore di 40 e b
è inferiore a 6.
if [ $a -gt 40 -a $b -lt 6 ]
Esempio :Troviamo il tipo di triangolo leggendo le lunghezze dei suoi lati.
read a
read b
read c
if [ $a == $b -a $b == $c -a $a == $c ]
then
echo EQUILATERAL
elif [ $a == $b -o $b == $c -o $a == $c ]
then
echo ISOSCELES
else
echo SCALENE
fi
Risultato :
Caso di prova n. 1
Caso di prova n. 2
Caso di prova n. 3
Ciclo e salto
I cicli For ti consentono di eseguire istruzioni un numero specifico di volte.
Looping con i numeri:
Nell'esempio seguente, il ciclo ripeti 5 volte.
#!/bin/bash
for i in {1..5}
do
echo $i
done
Ciclo con stringhe:
Possiamo anche scorrere le stringhe.
#!/bin/bash
for X in cyan magenta yellow
do
echo $X
done
Ciclo mentre
Mentre i loop controllano una condizione e continuano fino a quando la condizione rimane true
. È necessario fornire un'istruzione counter che incrementi il contatore per controllare l'esecuzione del ciclo.
Nell'esempio seguente, (( i += 1 ))
è l'istruzione contatore che incrementa il valore di i
.
Esempio:
#!/bin/bash
i=1
while [[ $i -le 10 ]] ; do
echo "$i"
(( i += 1 ))
done
Lettura di file
Supponiamo di avere un file sample_file.txt
come mostrato di seguito:
Possiamo leggere il file riga per riga e stampare l'output sullo schermo.
#!/bin/bash
LINE=1
while read -r CURRENT_LINE
do
echo "$LINE: $CURRENT_LINE"
((LINE++))
done < "sample_file.txt"
Risultato:
Come eseguire comandi con back tick
Se è necessario includere l'output di un comando complesso nello script, è possibile scrivere l'istruzione all'interno dei segni di spunta indietro.
Sintassi:
var=` commands
`
Esempio :Supponiamo di voler ottenere l'output di un elenco di punti di montaggio con tmpfs
a loro nome. Possiamo creare una dichiarazione come questa:df -h | grep tmpfs
.
Per includerlo nello script bash, possiamo racchiuderlo in segni di spunta indietro.
#!/bin/bash
var=`df -h | grep tmpfs`
echo $var
Uscita:
Come ottenere argomenti per gli script dalla riga di comando
È possibile fornire argomenti allo script in esecuzione.
$@
rappresenta la posizione dei parametri, a partire da uno.
#!/bin/bash
for x in $@
do
echo "Entered arg is $x"
done
Esegui in questo modo:
./script arg1 arg2
Come automatizzare gli script pianificando tramite cron Jobs
Cron è un'utilità di pianificazione dei lavori presente in sistemi simili a Unix. È possibile pianificare i lavori da eseguire quotidianamente, settimanalmente, mensilmente o in un'ora specifica del giorno. L'automazione in Linux si basa fortemente sui lavori cron.
Di seguito è riportata la sintassi per programmare i cron:
# Cron job example
* * * * * sh /path/to/script.sh
Qui, *
rappresenta rappresenta rispettivamente minuto/i ora/i giorno/i mese/i giorno/i della settimana.
Di seguito sono riportati alcuni esempi di pianificazione dei lavori cron.
PROGRAMMA | VALORE PIANIFICATO |
---|---|
5 0 * 8 * | Alle 00:05 di agosto. |
5 4 * * 6 | Alle 04:05 di domenica. |
0 22 * * 1-5 | Alle 22:00 di tutti i giorni della settimana dal lunedì al venerdì. |
Puoi conoscere cron in dettaglio in questo post del blog.
Come controllare gli script esistenti in un sistema
Utilizzo di crontab
crontab -l
elenca gli script già pianificati per un particolare utente.
Utilizzo del comando trova
Il find
comando aiuta a individuare i file in base a determinati modelli. Poiché la maggior parte degli script termina con .sh
, possiamo usare lo script di ricerca in questo modo:
find . -type f -name "*.sh"
Dove,
.
rappresenta la directory corrente. Puoi modificare il percorso di conseguenza.-type f
indica che il tipo di file che stiamo cercando è un file di testo.*.sh
dice di abbinare tutti i file che terminano con.sh
.
Se sei interessato a leggere in dettaglio il comando trova, controlla il mio altro post.
Conclusione
In questo tutorial abbiamo appreso le basi dello scripting della shell. Abbiamo esaminato esempi e sintassi che possono aiutarci a scrivere programmi significativi.
Qual è la tua cosa preferita che hai imparato da questo tutorial? Fammi sapere su Twitter!
Puoi leggere i miei altri post qui.
Vettore di lavoro creato da macrovector - www.freepik.com