Se stai iniziando con i sistemi Linux, termini come "Scripting della shell" o "Scripting Bash ” può essere abbastanza comune – Ma cosa significano? Prima di entrare nei dettagli, l'apprendimento dello scripting Bash può aiutarti a risparmiare tempo nell'esecuzione e nell'esecuzione di varie attività di sistema, a comprendere meglio la riga di comando di Linux (Terminale) e ad automatizzare più attività di sistema.
Cos'è Bash?
Bash, acronimo di "Bourne-Again-Shell" è una shell Unix o un interprete del linguaggio dei comandi per il sistema operativo GNU. È stata la shell principale per le distribuzioni Linux e le versioni di macOS di Apple prima di macOS Catalina. Bash è disponibile anche per Windows 10 tramite il sottosistema Windows per Linux.
Bash in genere viene eseguito in una finestra di testo comunemente nota come Terminale, in cui gli utenti digitano i comandi per eseguire varie attività. Bash può anche eseguire comandi scritti in un file, un metodo denominato "bash scripting".
Differenza tra script Bash e script Shell
Lo scripting della shell e lo scripting Bash non sono la stessa cosa. Con lo scripting Bash, stai usando esplicitamente la shell bash. D'altra parte, scripting della shell può essere una parola piuttosto generica poiché abbiamo altre shell disponibili oltre a Bash. Alcuni dei più comuni includono Korn (ksh), shell C (csh), shell Z (zsh) e shell Bash (sh). Tuttavia, non sarebbe una sorpresa trovare persone che usano bash scripting e shell scripting in modo intercambiabile per significare la stessa cosa. Il nostro post sulle 6 migliori shell open source per Linux fornisce una descrizione dettagliata di queste shell.
In questo post, esamineremo lo scripting di Bash. Per impostazione predefinita, molte distribuzioni Linux disponibili utilizzano la shell Bash. Dai un'occhiata al nostro post sulle 6 migliori distribuzioni Linux per principianti. Per confermare la shell che stai utilizzando sulla tua attuale distribuzione Linux, esegui il comando sul Terminale.
echo $SHELL
Dall'immagine sopra, puoi vedere che l'interprete predefinito nel mio sistema è bash. Attualmente sto utilizzando Ubuntu 20.04 LTS. Immergiamoci!
Capire gli script di Bash
Gli script Bash sono file di testo contenenti comandi bash che vengono eseguiti per eseguire varie attività. Per scrivere questi script, hai solo bisogno di un semplice editor di testo come gedit, leaf pad, vim, nano e molto altro. Ricordati di salvare i tuoi script con un .sh
estensione e come testo normale e non rich text. Uno dei miei editor preferiti che utilizzo per scrivere gli script è il nano editor.
Denominazione, assegnazione di autorizzazioni ed esecuzione di uno script Bash
Come spiegato sopra, assicurati di utilizzare l'estensione .sh per i tuoi script bash. Ad esempio, puoi avere uno script con il nome fosslinux_backup.sh
. Tuttavia, sarebbe meglio se fossi cauto nel nominare i tuoi script. Ad esempio, alla maggior parte delle persone piace salvare la maggior parte dei propri script come "test". Sconosciuto ai più, esiste un comando integrato in Unix chiamato test, che controlla i tipi di file e confronta i valori. Puoi utilizzare il comando which per verificare se esiste un programma con lo stesso nome di quello del tuo script per prevenire eventuali conflitti di programma.
which [command] e.g which test
Dall'output sopra, possiamo vedere che test è già un comando integrato. Pertanto, per evitare qualsiasi conflitto tra i programmi, non nominerò nessuno dei miei script come "test".
Per rendere lo script eseguibile per ogni utente, utilizzare il comando seguente:
chmod +x [script.sh]
Per rendere eseguibile lo script per l'utente corrente, utilizzare il comando seguente:
chmod u+x [script.sh]
Ora per eseguire lo script, esegui il comando seguente:
./[script_name]
Con il metodo sopra, ti renderai conto che dovrai usare il cd
comando per spostarsi nella directory contenente lo script o passare il percorso allo script. Tuttavia, c'è una soluzione a questo. Salva i tuoi script nel bin
directory presente nella directory home.
Con gli aggiornamenti recenti, la maggior parte delle distribuzioni non viene fornita con il bin
cartella per impostazione predefinita. Pertanto, ti verrà richiesto di crearlo manualmente. Posizionando i tuoi script in questa cartella, puoi eseguire lo script digitandone il nome sul Terminale senza usare il cd
e ./
comandi.
Linee guida per gli script di Bash
Prima di scrivere il tuo primo script, ci sono alcune linee guida che devi comprendere quando scrivi gli script.
- Tutti i tuoi script dovrebbero iniziare con la riga "#!/bin/bash".
- Inserisci ogni comando su una nuova riga.
- Ogni commento inizia con un
#
simbolo. - I comandi sono racchiusi tra
()
parentesi.
Il #!/bin/bash
(Hash-Bang Hack) è il percorso della shell che useremo. Se stai usando un'altra shell, dovresti modificare questo percorso. Comprendiamo che tutti i commenti iniziano con #
simbolo. Tuttavia, se seguito da un (!)
mark in Hash-Bang Hack, lo script è forzato ad essere eseguito con la shell indicata da questa riga. Nel nostro caso, è la shell Bash.
Il tuo primo script Bash
Come la maggior parte dei linguaggi di programmazione, scriveremo uno script che stampa "Hello World" istruzione quando eseguita. Apri il tuo editor di testo preferito e incolla i comandi seguenti. Salva il file di testo come fossHelloWorld.sh
o qualsiasi altro nome che non sia un comando integrato.
#!/bin/bash #This script will print 'Hello World' on the Terminal echo "Hello World"
Una volta salvato il file, rendilo eseguibile eseguendo il comando seguente:
chmod +x fossHelloWorld.sh
Ora, eseguilo con il comando seguente:
./fossHelloWorld.sh
Lo script sopra ha solo tre righe. Il primo è Hash-Bang Hack, di cui abbiamo discusso sopra, il secondo è un commento e il terzo è il comando che verrà eseguito. Nota, i commenti non vengono mai eseguiti.
Diamo un'occhiata ad altre funzionalità di scripting di bash che puoi utilizzare.
Comando Eco
Il comando Echo viene utilizzato per stampare l'output sulla riga di comando di Linux o sul Terminale. Se sei uno sviluppatore e hai già lavorato con PHP, devi esserti imbattuto anche in questo comando. Scriviamo un piccolo script bash per dimostrare come funziona questo comando.
#!/bin/bash #Let's print the first line echo "This is Fosslinux.com - With a new line" #Let's print the Second statement without a new line echo -n "This is Fosslinux - No new Line"
Salva il tuo script, assegna le autorizzazioni richieste ed eseguilo.
Per comprendere il codice, il primo comando echo stampa un'istruzione e passa alla riga successiva. Il secondo comando echo ha il -n
argomento che impedisce allo script di passare alla riga successiva. Puoi usare molte altre opzioni con il comando Echo, comprese le variabili, come vedremo di seguito.
Variabili
Le variabili sono una parte comune e necessaria di qualsiasi linguaggio di programmazione. Si possono dichiarare variabili Bash in diversi modi. Quando si assegna un valore a qualsiasi variabile, non è necessario utilizzare alcun simbolo. Tuttavia, quando chiami il valore della variabile, dovrai utilizzare il $
segno all'inizio della variabile.
Puoi usare le variabili sul Terminale o come script. Esegui i comandi seguenti sul tuo Terminale.
myWebsite = "Fosslinux.com" echo $myWebsite
Ora creiamo uno script bash che prende due input dall'utente e li memorizza nelle variabili $x
e $y
. Lo script verificherà quindi se i due valori sono uguali o meno.
#!/bin/bash echo "Enter the first number" read a echo "Enter the second number" read b if [[ $a -eq $b ]] then echo "Numbers are equal" else echo "Numbers are not equal" fi
Salva lo script ed eseguilo. Dall'immagine qui sotto, puoi vedere che abbiamo inserito valori diversi e lo script è stato in grado di verificare se sono uguali o meno.
Ora, diamo un'occhiata più da vicino al codice. Le prime due istruzioni echo richiedono all'utente di immettere il primo e il secondo numero. Il read
il comando attenderà che l'utente inserisca un numero e lo memorizzi nella variabile specificata. Nel nostro caso, è a
e b
. Abbiamo quindi un'istruzione if che controlla se i due valori sono uguali o meno.
Dichiarazione condizionale
In qualsiasi linguaggio di programmazione, le istruzioni condizionali controllano il flusso di un programma. Un pezzo di codice verrà eseguito solo quando viene soddisfatta una condizione particolare. Alcune delle affermazioni condizionali più comuni includono "se-allora-altrimenti" e "caso". Di seguito è riportata la sintassi di base dell'istruzione if-then-else.
if [[ condition ]] then <execute an instruction> else <execute another instruction/command> fi
Dai un'occhiata allo script seguente, che utilizza l'istruzione condizionale "if-then-else".
#!/bin/bash echo "Enter Your Age" read age if ((age > 18 )) then echo "You can go to the party" else echo "You are not eligible to go to the party" fi
Esaminiamo lo script sopra. Abbiamo l'echo
dichiarazione che richiede agli utenti di inserire il proprio numero di età. Il read
l'istruzione memorizza l'età inserita in una variabile "età". Abbiamo quindi un'istruzione condizionale if-then-else che controlla se l'età è maggiore di 18 anni prima di istruire l'utente.
Cicli
I loop sono comunemente usati quando si desidera eseguire più volte un pezzo di codice. Ad esempio, se volessi fare eco a 1000 righe dell'affermazione "Benvenuto in Fosslinux", avrei bisogno di 1000 istruzioni echo. Tuttavia, con i loop, tutto ciò che devo fare è specificare il numero di volte in cui voglio che l'istruzione venga ripetuta o stampata sul Terminale. Bash supporta tre tipi di loop; For Loop, While Loop e Until Loop. Diamo un'occhiata a ciascuno di essi.
-
Il ciclo For
Un ciclo For viene utilizzato per scorrere un elenco di dati specificati o un array. Di seguito è riportata la sintassi di base di Bash For Loop;
for Value in 1 2 3 4 5 .. N do instruction1 instruction2 instruction-N done
o,
for VALUE in file1 file2 file3 do instruction1 on $VALUE instruction2 instruction-N done
Dai un'occhiata allo script qui sotto. Scorre i giorni della settimana indicati e li stampa sul Terminal riga per riga.
#Read a weekday name in each iteration of the loop for day in Monday Tuesday Wednesday Thursday Friday Saturday Sunday do echo "$day" done
Salviamo lo script come ForLoop.sh
ed eseguilo. Di seguito è riportato uno screenshot dell'output.
Questo è solo un semplice esempio di cosa puoi fare con For Loop. Puoi anche combinarlo con istruzioni condizionali per completare un'attività particolare.
-
Il ciclo While
Il ciclo While esegue un'attività specifica mentre una condizione particolare rimane True. In ogni iterazione, il ciclo verificherà prima la condizione prima di eseguire le istruzioni. Quando la condizione è False, il ciclo terminerà. La sintassi di base del ciclo While bash è la seguente:
while [CONDITION] do [COMMANDS] done
Ad esempio, possiamo avere uno script che stamperà la dichiarazione "Benvenuto in FOSSLINUX.COM" 20 volte fino a quando una variabile X è impostata su 20. Proviamo a implementarlo praticamente. Dai un'occhiata allo script qui sotto.
#!/bin/bash x=1 while [ $x -le 20 ] do echo "Welcome to FOSSLINUX.COM" x=$(( $x + 1 )) done
Salviamo lo script come WhileLoop.sh
ed eseguilo. Di seguito è riportato uno screenshot dell'output.
Diamo un'occhiata allo script While Loop sopra. Per prima cosa dichiariamo una variabile X assegnandole il valore 1. Creiamo quindi un'istruzione While che restituisce l'istruzione "Benvenuto in FOSSLINUX.COM" mentre X è inferiore a 20. Infine, incrementiamo X di uno dopo ogni iterazione.
-
Il ciclo fino a
I cicli Bash Until vengono utilizzati per eseguire una serie di istruzioni o comandi purché la condizione impostata risulti falsa. Di seguito è riportata la sintassi di base di Until Loop.
until [CONDITION] do [INSTARUCTIONS/COMMANDS] done
Simile al ciclo While, il ciclo Until valuta prima la condizione impostata prima di eseguire le istruzioni o i comandi. Se la condizione restituisce false, le istruzioni vengono eseguite. Il ciclo viene terminato quando la condizione restituisce true. Dai un'occhiata all'esempio qui sotto.
#!/bin/bash count=0 until [ $count -gt 5 ] do echo Counter: $count ((count++)) done
Dopo aver salvato ed eseguito lo script sopra, otteniamo l'output di seguito:
Gli script precedenti creano prima un conteggio variabile e lo impostano su zero(0). Questa è la condizione che controlla il flusso del nostro programma. Il ciclo Until verifica se il valore di conteggio è maggiore di 5. In caso contrario, stamperà le istruzioni passate. Tuttavia, se il valore è maggiore di 5, il ciclo terminerà immediatamente. Infine, incrementiamo il valore di conteggio di 1 (count++).
Funzioni Bash
Nella programmazione e nello scripting, le funzioni vengono utilizzate per contenere un pezzo di codice riutilizzabile necessario per eseguire un'attività particolare. Pertanto, se si dispone di comandi simili che si desidera eseguire in parti diverse dello script, non è necessario scrivere ripetutamente questi comandi. Racchiudili in una funzione ed esegui invece la funzione.
Di seguito è riportata la sintassi di base della funzione Bash.
function_name () { <instructions/commands> }
o,
function function_name { <instructions/commands> }
Creiamo un semplice script che fa uso di funzioni. Per prima cosa creiamo una funzione chiamata "myFunction", che restituisce l'istruzione "Ciao, sono la prima funzione" quando viene chiamata. La seconda funzione, "myCities", è un po' avanzata in quanto accetta gli argomenti passati. Gli argomenti vengono forniti dopo aver chiamato il nome della funzione. Sono accessibili nella funzione come $1.
#!/bin/bash myFunction () { echo "Hello I am the first function" echo "Hello I am the first function" echo } echo "This is the second function" function myCities () { echo Hello $1 } myFunction myCities Washington,D.C myCities Phoenix
Dopo aver salvato ed eseguito lo script, otteniamo l'output di seguito.
Menu Bash
Quando si scrive uno script per eseguire un'attività avanzata, potrebbe essere necessario che l'utente selezioni una singola opzione tra diverse opzioni visualizzate sul Terminale. Per ottenere ciò, utilizzeremo bash select
comando.
Crea un semplice script di menu che richiederà agli utenti di selezionare le loro distribuzioni Linux preferite da un elenco. Dai un'occhiata allo script qui sotto.
#!/bin/bash #Print message for the user echo "Select your favorite Linux Distribution" select distro in Ubuntu Fedora OpenSUSE DeepIN Parrot ArchLinux Kali do #Print the selected value if [[ $distro == "Exit" ]] then exit 0 else echo "Selected Linux distribution is $distro" fi done
Salviamo lo script come menu.sh ed eseguiamolo. Otteniamo l'output di seguito.
Nello script sopra, abbiamo un elenco di sette distribuzioni Linux che l'utente ne selezionerà. Dopo aver effettuato una selezione, questa viene memorizzata nella variabile distro
e successivamente stampato concatenandolo con la stringa "Selected Linux Distribution is." I menu di selezione di Bash possono essere molto utili, specialmente quando hai più script che eseguono attività diverse e uno deve selezionare quello che desidera eseguire.
Aritmetica
Ogni linguaggio di programmazione supporta l'esecuzione di operazioni aritmetiche e lo scripting bash non fa eccezione. Tuttavia, il modo in cui eseguiamo le operazioni aritmetiche è leggermente diverso. Di seguito è riportato uno dei modi in cui è possibile eseguire operazioni aritmetiche in bash. Esamineremo quattro tipi di operazioni aritmetiche:somma, divisione e moltiplicazione.
#!/bin/bash # Calculate the sum result=$((70+15)) # Print sum value echo "sum = $result" # Calculate the division result=$((100/25)) # Print division value echo "division = $result" #Calculate Multiplication result=$((15*15)) echo "Multiplication = $result"
Salviamo lo script sopra come arithmetic.sh ed eseguiamolo. Otteniamo l'output di seguito.
Conclusione
Questa è una guida completa per principianti per iniziare con lo scripting Bash. Tuttavia, c'è di più in Bash oltre a ciò che è trattato in questo tutorial. Uno dei posti che consiglierei per migliorare le tue abilità è il Bash Reference Manual di GNU. In caso di problemi o commenti su questo post, non esitare a selezionare i commenti qui sotto.