web analytics

[Guida] Bash Fundamentals: come creare script per GNU/Linux

bash alias function

Questa breve guida vuole essere una schematizzazione dei concetti base per programmare con Bash in GNU/Linux. Come per tutti i linguaggi, tuttavia, anche in questo caso l’unico modo davvero efficace per capirne il funzionamento è leggere tanto, tanto codice.

Programmazione Bash: interazione tra comandi

Prima di capire come è strutturato uno script, è necessario introdurre alcuni concetti chiave. In particolare bisogna capire come i vari comandi eseguibili in Bash riescono ad interagire tra loro. Spesso, infatti, risulta pratico utilizzare diversi comandi in un’unica istruzione, ma si vuole condizionare l’esecuzione delle istruzioni successive alla buona riuscita di quelle precedenti. In tal caso va utilizzato l’operatore &&. Viceversa, l’operatore || esegue la seconda istruzione solo se la prima fallisce.

echo “Hello World” > ciaomondo     #creo il file ciaomondo contenente una stringa;
cat ciaomondo && cat nonesisto     #stampa contenuto primo file e produce errore file inesistente
cat nonesisto && cat ciaomondo     #produce errore

In Linux, tuttavia, bisogna tener presente che si potrebbe non arrivare al risultato atteso. Non tutti i programmi, infatti, funzionano allo stesso modo e potrebbe capitare di dover leggerne la documentazione o addirittura il codice sorgente, per capire in che circostanze quel particolare processo produca un fallimento come risposta.

Per quanto riguarda il redirect dell’I/O ed il pipeline tra processi, invece, potete fare riferimento a questa guida pubblicata sempre qui su LFFL.

redirect error

Shell script

Lo scripting della shell non è utile solo per il raggruppamento di più comandi, ma permette anche di controllare il flusso delle istruzioni basandosi sugli input dell’utente (o di altri processi). La struttura di uno script eseguibile in Bash è semplicissima. Create un nuovo file.sh ed utilizzate come intestazione:

#! /usr/bin/env bash

Questa serve ad indicare alla macchina la posizione dell’interprete che deve eseguire le successive linee di codice contenute nello script. All’interno degli script si possono utilizzare costrutti condizionati, cicli, funzioni ma anche i comandi che generalmente utilizzate nel terminale come cp o ls. Per eseguire un file, poi, basterà recarsi all’interno della cartella che lo contiene e avviarlo con una sintassi simile alla seguente:

./file.sh

Variabili

Per quanto riguarda le variabili, Bash è un linguaggio a tipizzazione dinamica, non è necessario, quindi, specificarne il tipo al momento della loro dichiarazione. Per inizializzare una variabile e, successivamente, richiamarne il valore, la sintassi è:

comando=echo                            #una variabile può contenere anche un comando Bash
${comando} "Ciao Mondo"                 #ne richiamo il contenuto con ${ ... }

nome[0]="Linus"                         #inizializzo un array
nome[1]="Richard"
echo ${nome[1]} 

read -p "inserire un numero: " valore   #per inizializzare la variabile tramite input

Bash: condizioni e cicli

Se masticate le basi di programmazione sapete sicuramente a cosa serve condizionare o ciclare una serie di istruzioni all’interno di un programma. In bash l’utilizzo di questo genere di istruzioni funziona come ci si aspetta. Ad esempio, è possibile utilizzare <b>if</b> nel seguente modo:

read -p "inserire un numero: " valore 
resto=$(expr $valore % 2)
if [ $resto -eq 0 ]; then
 echo "pari"
else
 echo "dispari"
fi

bash scripting if example

Quello che ho evidenziato in grassetto è il comando test, che serve proprio a verificare le condizioni. Sono possibili numerose opzioni, visualizzabili da man test. Ad esempio nel seguente screenshot vi ho riportato quelle relative all’esistenza o meno di un file specifico.

bash test command

Per quanto riguarda la creazione di alias e funzioni, infine, potete fare riferimento a questa guida.

sharing-caring-1Seguiteci sul nostro canale Telegram, sulla nostra pagina Facebook e su Google News. Nel campo qui sotto è possibile commentare e creare spunti di discussione inerenti le tematiche trattate sul blog.