Se è la prima volta che create uno script in Bash non preoccupatevi, non è così complicato.
Tutto quello che vi serve:
- una distribuzione LINUX o un sistema operativo UNIX
- un editor di testo (raccomando Emacs).
Se volete inserire i commenti dovete digitare il carattere "#" prima di essi, ad esempio:
Per stampare un messaggio a video invece usate la seguente sintassi:
In questo esempio potete vedere come definire una variabile per poi stamparla a video:
Vi mostro un esempio:
Proviamo ad eseguire il codice.
Le principali variabili di sistema sono:
BASH: Il nome della vostra shell
BASH_VERSION: la versione della shell
HOME: La vostra cartella home
OSTYPE: Il tipo di sistema operativo
PWD: L'attuale directory
SHELL: Il nome della shell
USERNAME: Il nome di chi ha effettuato il login
La stampa di queste varibili è identica alla stampa di una qualsiasi variabile:
Ad esempio:
Ecco un esempio su come prelevare e stampare gli argomenti passati da linea di comando:
Questo codice se eseguito stamperà:
Come potete vedere con "$n" potete stampare l'n-esimo argomento mentre con "$*" o con "$@" stampate tutti gli argomenti passati.
Sinstassi:
Ad esempio, se volete forzare l'utente a passare solo due argomenti da linea di comando, il codice dovrà essere il seguente:
Se avete più costrutti annidati potete usare la sintassi seguente:
Se avete più condizioni usate:
Sintassi:
Un esempio concreto:
Lanciando lo script ottente:
Esempio di utilizzo:
Tutto quello che vi serve:
- una distribuzione LINUX o un sistema operativo UNIX
- un editor di testo (raccomando Emacs).
Come iniziare
In bash tutti gli script iniziano con "#!" (shebang) seguito dalla path per invocare la bash:#!/bin/bash
Se volete inserire i commenti dovete digitare il carattere "#" prima di essi, ad esempio:
#!/bin/bash # il mio commento
Per stampare un messaggio a video invece usate la seguente sintassi:
#!/bin/bash echo "Ciao a tutti!"
Eseguire lo script
Per eseguire il vostro script digitate da console:$ bash mio_script.shOppure se volete renderlo eseguibile:
$ chmod +x mio_script.sh $ ./mio_script.sh
Variabili
Sintassi: nome_variabile=valoreIn questo esempio potete vedere come definire una variabile per poi stamparla a video:
#!/bin/bash variabile="Ciao a tutti!" echo $variabile
Variabili globali e variabili locali
Come in tutti i linguaggi di programmazione anche in bash bisogna sempre stare attenti alla dichiarazione delle variabili, ma sopratutto allo scope delle varibili.Vi mostro un esempio:
#!/bin/bash # Definisco una variabile globale var="GLOBALE" function bash { # Definisco una variabile locale # Questa variabile è visibile solo all'interno della funzione local var="LOCALE" echo $var } echo $var bash echo $varCosa restituisce?
Proviamo ad eseguire il codice.
$ chmod +x test.sh $ ./test.sh GLOBALE LOCALE GLOBALE
Variabili di sistema
Le variabili di sistema sono definite da Linux stesso. Queste variabili sono importanti per conoscere l'ambiente in cui viene eseguito il codice.Le principali variabili di sistema sono:
BASH: Il nome della vostra shell
BASH_VERSION: la versione della shell
HOME: La vostra cartella home
OSTYPE: Il tipo di sistema operativo
PWD: L'attuale directory
SHELL: Il nome della shell
USERNAME: Il nome di chi ha effettuato il login
La stampa di queste varibili è identica alla stampa di una qualsiasi variabile:
echo $USERNAME echo $HOME
Eseguire più istruzioni in una sola riga
Sintassi: comando1; comando2; comandoN;Ad esempio:
$ ls; dateStamperà la lista dei files e cartelle + la data corrente.
Modalità interattiva
Per far si che l'utente possa inserire le variabli quando richiesto la soluzione è comoda e veloce:#!/bin/bash echo -n "Inserisci il tuo nome: " read nome echo "Ciao $nome!"
Argomenti da linea di comando
Gli argomenti in bash vengono salvati nell'ordine in cui sono stati inseriti.Ecco un esempio su come prelevare e stampare gli argomenti passati da linea di comando:
#!/bin/bash echo "Hai inserito $# argomenti" echo "$0 è il nome dello script" echo "$1 è il primo argomento" echo "$2 è il terzo argomento" echo "Tutti gli argomenti: $* o $@"
Questo codice se eseguito stamperà:
$ bash test.sh -a -b -c 10 "ciao" Hai inserito 5 argomenti hello.sh è il nome dello script -a è il primo argomento -b è il terzo argomento Tutti gli argomenti: -a -b -c 10 ciao o -a -b -c 10 ciao"$#" stampa il numero di argomenti passati al vostro script.
Come potete vedere con "$n" potete stampare l'n-esimo argomento mentre con "$*" o con "$@" stampate tutti gli argomenti passati.
if / then / else
Come in tutti i linguaggi di programmazione anche gli script in bash hanno i blocchi condizionali.Sinstassi:
if condizione then # se la condizione è verificata # esegui questa porzione di codice else # se la condizione NON è verificata # esegui questa porzione di codice fi
Ad esempio, se volete forzare l'utente a passare solo due argomenti da linea di comando, il codice dovrà essere il seguente:
#!/bin/bash if [ $# != 2 ] then echo "$0 : Devi inserire 2 argomenti" exit 1 else echo "Ok!" fi
Se avete più costrutti annidati potete usare la sintassi seguente:
if condizione then if condizione then # fai questo else # fai questo fi else # fai questo fi
Se avete più condizioni usate:
if condizione 0 then # se la condizione 0 è verificata # fai questo elif condizione 1 then # altrimenti se la condizione 1 è verificata # fai questo elif condizione 2 then # altrimenti se la condizione 2 è verificata # fai questo else # altrimenti fai questo fi
Il ciclo for
Il ciclo for vi permette di eseguire un'istruzione n volte in modo automatico.Sintassi:
for { nome variabile } in { lista } do # esegue questa riga # per il numero di elementi della lista # termina quando la lista è finita done
Un esempio concreto:
#!/bin/bash for i in 1 2 3 4 5 do if [ $i == 1 ] then echo "Ho eseguito questa riga $i volta" else echo "Ho eseguito questa riga $i volte" fi done
Lanciando lo script ottente:
$ bash test.sh Ho eseguito questa riga 1 volta Ho eseguito questa riga 2 volte Ho eseguito questa riga 3 volte Ho eseguito questa riga 4 volte Ho eseguito questa riga 5 volte
Il ciclo while
Sintassi:while [ condizione ] do #comando 1 #comando 2 #comando 3 doneFinchè "
condizione
" è vera il ciclo continua. Di solito la condizione è un'espressione booleana. I cicli infiniti si verificano quando la condizione non è mai valutata come falsa.Esempio di utilizzo:
#!/bin/bash contatore=$1 fattoriale=1 while [ $contatore -gt 0 ] do fattoriale=$(( $fattoriale * $contatore )) contatore=$(( $contatore - 1 )) done echo $fattoriale
Commenti
Posta un commento
Gli autori non sono responsabili per quanto pubblicato dai lettori nei commenti ad ogni post. Verranno cancellati i commenti ritenuti offensivi o lesivi dell’immagine o dell’onorabilità di terzi, di genere spam, razzisti o che contengano dati personali non conformi al rispetto delle norme sulla Privacy e, in ogni caso, ritenuti inadatti ad insindacabile giudizio degli autori stessi.