In questo articolo vediamo un’introduzione al terminale ed allo scripting sui sistemi Linux.

Il bash è la shell più comune ed utilizzata, il suo nome viene da un (pessimo) gioco di parole: Bourne Again SHell. Il suono di Bourne è simile a born che vuol dire nascere. Quindi Shell rinata, ma inteso come la shell di Bourne.

In verità però, è possibile utilizzare altre shell: per sapere quali shell possiamo usare nel nostro PC, lanciamo da terminale:

cat etc/shells

Il comando cat ci permette di concatenare files e stamparne a video il contenuto. Il file shells contiene la lista delle shells disponibili sul nostro computer, ma ricorda: le shells hanno tutte lo stesso scopo, solo che lo fanno in modo differente. Infatti non è detto che questi comandi visti finora, e quelli che vedremo più avanti, funzioneranno su tutte le shells.

Tanto per essere sicuro, controlla che sei connesso dalla shell bash lanciando il comando:

echo $SHELL

Il comando echo, permette di stampare a video un testo: ad esempio echo “Ciao” stamperà Ciao.
$SHELL invece è una variabile di sistema (creata appunto da Linux): una variabile è una specie di etichetta, a cui possiamo associare una stringa o un numero e col bash possiamo definire delle nuove variabili.

Per definire una variabile, dobbiamo fare così:

nomeVariabile=Contenuto
nomeVariabile="Una Stringa un pò lunga"
nomeVariabileNumero=24

I nome della variabile devono cominciare e contenere solo underscore (il carattere _) o caratteri alfanumerici.
I nomi sono case sensitive, e non devono contenere spazi ne dentro al titolo, ne prima ne dopo l’uguale. Per poter poi riferirci alla variabile creata, dovremo anteporre il simbolo del dollaro.

La domanda ora, nasce spontanea: se stiamo facendo scripting da shell, come facciamo a lanciare in serie una lunga lista di istruzioni? Ottima domanda: per farlo, possiamo creare un file con estensione .sh che poi possiamo avviare usando i comandi:

./file.sh
bash file.sh
sh file.sh

Se proprio vogliamo fare i fighi poi, e siamo quì per questo, possiamo creare il nostro file direttamente da terminale: un’editor molto potente è Vim: VI è un editor per Unix mentre la M stà per iMproved. Quindi Vi migliorato.
Questo editor ripeto è molto potente, solo che richiede un pò di pratica per essere maneggiato a pieno: un consiglio è leggervi il manuale (esistono libri giganteschi solo per imparare ad usare appieno questo editor e a volte è l’unico che avete disponibile perciò vale la pena almeno saperlo usare di base).
Allora dicevamo, vediamo come scrivere i nostri script da Vi:
Per questa guida, vogliamo creare una cartella apposita per contenere il file con cui lavoreremo per evitare di fare possibili casini (no, non faremo casini è solo una scusa :P) lanciamo perciò da terminale il comando mkdir (per creare una directory) seguito dal nome della cartella da creare:

mkdir GuidaInformaticalab

Adesso, spostiamoci dentro alla cartella dove vogliamo creare il file usando il comando cd:

admin@informaticalab:~$ cd GuidaInformaticaLab

Noterai sicuramente che adesso la linea di comando è diventata così:

admin@informaticalab:~/GuidaInformaticaLab$

Allora potrebbe venirti in mente che cosa vuol dire quella linea ondeggiata che precede /GuidaInformaticaLab: quel simbolo si chiama tilde, ed è ottenibile premendo alt + il tasto alla destra del punto interrogativo. Con tilde, intendiamo la nostra directory personale:
Prova a dare:

admin@informaticalab:~/GuidaInformaticaLab$ 
echo ~/home/admin

Creiamo ora il nostro file con Vim:

vi provaBash.sh

Adesso ci apparirà il nostro editor di testo: prima di tutto, don’t panic.
Per inserire del testo e quindi poter scrivere, premi “i” e potrai cominciare a scrivere del testo; dopodichè potremo scrivere il nostro primo script in bash:

#Primo script Bash
ciao="Hello,Bash"
echo $ciao

Sbagliato a digitare? Se si, avrai notato che il tasto per cancellare non fa altro che spostarci un carattere indietro, che viene poi sovrascritto. Per cancellare un carattere, dovremo cliccare su esc, metterci sul carattere e premere x, oppure utilizzando il tasto “canc”.
Ora che abbiamo terminato di scrivere, clicchiamo su esc e scriviamo:

:wq

Con w salviamo il nostro file, mentre q ci permette di uscire dall’ editor.

Terminal.hicube

Ora che abbiamo creato il file, lanciamolo: aspetta, come diavolo si chiamava? Usiamo il comando ls (list) per avere una lista dei file contenuti dalla directory:

admin@informaticalab:~/GuidaInformaticaLab$ ls
provaBash.sh

Ah si, giusto, provaBash.sh. Bene, per lanciarlo usiamo la sintassi vista prima:

admin@informaticalab:~/GuidaInformaticaLab$ ./provaBash.sh
bash: ./prova.sh: Permission denied

Doh! Permesso negato! Ma che permessi abbiamo settato al nostro file? per vederli usiamo di nuovo ls, questa volta passandogli come parametro -l (long):

admin@informaticalab:~/GuidaInformaticaLab$ ls -l
-rw-rw-r-- 1 admin users 11 lug 18 06:58 prova.sh
  • admin si riferisce al nome utente proprietario del file,
  • users si riferisce al gruppo a cui appartiene al nome utente,

La prima parte fino all’ 1 (escluso) si riferisce ai permessi del file, ed è quì il problema. I permessi funzionano in questo modo: ci sono 3 triplette che permettono di definire:

  1. La prima tripletta, i permessi del proprietario;
  2. La seconda tripletta, i permessi del gruppo del proprietario;
  3. La terza tripletta, i permessi di tutti gli altri utenti.

Molto intuitivamente: r sta per read (lettura), w stà per write( scrittura), e l’ultimo è x che sta per execute (esecuzione).
Un’ altra visione importante ed usata molto comunemente è quella ottale: assegnamo ad ogni permesso un valore:

  • r: 4
  • w: 2
  • x: 1

Poi sommiamo per ogni tripletta i soli valori presenti. Per esempio, in questo caso, il mio utente ha permessi:

rw-

Quindi: 4 (r) + 2(w) = 6
Non ho sommato x in quanto non è presente.
Poi: rw-
Quindi: 4 + 2 = 6
Infine: 4
La rappresentazione ottale è 664.
A noi, quello che serve, è la possibilità di eseguire il file. Per modificare i permessi, usiamo il comando:

chmod 764 provaBash.sh

In questo modo ci diamo permessi di esecuzione. Normalmente, l’ideale è settare i permessi 775 dando ai guest (altri utenti) permessi di esecuzione e lettura ma non modifica.
Adesso, proviamo a ridare ls -l:

-rwxrw-r-- 1 admin users 11 lug 18 06:58 provaBash.sh

Se non ci ricordiamo la rappresentazione ottale, possiamo anche fare:

chmod u+x provaBash.sh

In questo modo, diamo all’utente (u) permessi di esecuzione lasciando tutti gli altri invariati. Per aggiungere i permessi al gruppo usiamo g+permesso (group) e agli altri utenti o+permesso (others) mentre per rimuoverli sostituiamo al + il segno meno (-).

Bene, finalmente siamo pronti ad eseguire il nostro file!

./provaBash.sh
ciao

Il testo che segue il simbolo cancelletto (#) non è stato eseguito in quanto è un commento.
Ok, finora abbiamo visto veramente molti comandi utili da terminale! Già adesso ne sapresti abbastanza per riuscire a fare diverse operazione direattamente da terminale, ma il viaggio non è ancora finito. Vediamo qualche altro comando utile!

Vediamo qualche utile variabile di sistema:

  • SHELL: come abbiamo già visto, contiene la shell in uso
  • PWD : contiene la directory dove stiamo lavorando
  • USERNAME : il nostro username
  • LOGNAME : il nostro nome di login
  • HOME: come tilde, la nostra home directory

Presto verrà anche la seconda parte (che troverete collegata quì) perciò restate in ascolto! 🙂