Micro corso Bash Unix/Linux – Parte 3
In questa parte si comincia a fare sul serio: tutti gli esempi che includo, ovviamente possono essere estesi con l’aggiunta di nuovi “comandi” inclusi nella propria distribuzione (o che vanno installati).
Analizzeremo COME creare un file di script, la sua struttura, e i vari costrutti: if, for, while.
Alla fine dell’articolo troverete una tabella riepilogativa di tutti i comandi unix più importanti (ce ne sono anche molti altri ovviamente).
FILE DI SCRIPT
Innanzitutto è necessario creare un nuovo file:
touch test
Poi bisogna anche modificare i permessi di esecuzione del file:
chmod u+x test
Se non hai l’interfaccia grafica è possibile utilizzare due “comodi” programmi: vi oppure nano (nano per me è più facile).
La prima riga deve sempre essere #!/bin/sh per scegliere quale sarà il programma che dovrà interpretare il contenuto del file (nel nostro caso la shell → sh).
Le variabili contenute in qualsiasi script shell sono:
- $1,$2,$3,$… : Per leggere i parametri passati allo script è si usano queste variabili ;
- $# : variabile contenente il numero dei parametri passati al programma;
- $0 : è il nome del comando (in questo caso test);
- shift : serve per shiftare i parametri;
- $* : lista di tutti i parametri
- $$ : pid del programma (lo script è un programma);
ESEMPIO
Invocazione:
./test michele tizio caio
contenuto del file:
#!/bin/sh echo $# #stampa 4 echo $0 # stampa “test” echo $1 # stampa “michele” echo $2 # stampa “tizio” shift # elimina “michele” echo $1 # stampa “tizio” shift #elimina “tuzui” echo $2 #stampa “caio” echo $# # stampa “2” echo $$ > pid_script # stampa sul file “pid_script” il pid del programma;
il comando test serve per testare delle condizioni (nel caso di if e while).
La convezione è 0 = true, non-zero = false:
- test -f: verifica l’esistenza di un file;
- test -d: verifica l’esistenza di una directory;
- test -r: diritto di lettura su un file;
- test
= : due stringe sono uguali?; - test
!= : due stringe sono diverse?; - test
-eq : due interi hanno lo stesso valore?; - test
-le : integer 1 è minore uguale all’integer 2?;
vedi “man test” per tutte le possibili opzioni di test.
IF-THEN-ELSE
if <comando> Then #comandi da eseguire se if vero (quindi il comando ha ritornato 0) elif <comando>; then <comandi da eseguire se elif vero> else <comandi> fi
il “fi” chiude l’istruzione IF.
ESEMPIO
#!bin/sh/ if test $1 -le 1 then echo “Si è minore di 1” else echo “No, è maggiore di 1” fi
Questo script verifica se il primo parametro dello script è minore di 1, se lo è stampa “è minore di 1”, altrimenti stampa “No, è maggiore di 1”.
CICLO FOR
for <var> in <list> do done
ESEMPIO
#!bin/sh/ for i in $* do if test $i -le 1 then echo “Si è minore di 1” else echo “No, è maggiore di 1” fi done
Stessa cosa di prima, ma stavolta il test viene fatto su tutti i parametri del comando.
CICLO WHILE
while do done
ESEMPIO
#!bin/sh/ while `test $# -ge 1` do if test $1 -le 1 then echo “Si è minore di 1” else echo “No, è maggiore di 1” fi shift done
Ancora una volta lo stesso esempio fatto con un ciclo while.
Nota bene: HO USATO LO SHIFT PER MUOVERE LE VARIABILI!!!
Ecco qui un utile riepilogo dei comandi shell.
RIEPILOGO COMANDI
Comando | Descrizione |
---|---|
cat |
visualizza il contenuto di un file. I File su linux sono quasi sempre file di testo ascii (UTF-8 nelle versioni più recenti) |
cd |
per cambiare directory, prende come argomenti o un path relativo, o un path assoluto |
cp |
copia un file.I parametri possono essere anche path relativi/assoluti |
chmod [u g o] [+ -] [rwx] |
cambia i diritti sul file/directory |
echo |
stampa sullo schermo il parametro che gli viene passato |
grep |
cerca |
ln |
crea un link |
ls [ |
lista dei file contenuti nella directory corrente (se non viene specificata una directory) |
pwd | stampa la cartella (path assoluto) nel quale si sta lavorando |
logout | termina la sessione corrente (alternativamente CTRL+D) |
login | esegue il login chiedendo username e password (case sensitive) |
mkdir |
crea una nuova cartella |
rmdir |
rimuove una cartella, se vuota. Per eliminare anche i file al suo interno rm -r |
mv |
taglia un file (o lo rinomina, il pricipio è uguale).I parametri possono essere anche path relativi/assoluti |
man |
manuale del comando |
kill -9 |
uccide un processo |
killall |
uccide tutti i processi, dato il nome di riferimento |
ps | mostra i processi attivi nel sistema |
touch | crea un nuovo file vuoto |
top | come ps |
tee | scrive l’output sia su file che su schermo |
sort |
ordina le righe di un file |
whoami | nome utente con cui si è effettuato il login |
who | lista degli utenti che sono loggati nel sistema |
wc |
conta il numero di parole in nomefile |
id | informazioni sull’utente con cui si è effettuato il login |
test |
effettua dei test tra due stringhe |
Nota Bene: Quasi tutti questi comandi, se vengono invocati senza parametri, prendono come input lo standard input, quindi puoi utilizzare la tastiera o effettuare un redirect (<) da file!
Vai alla parte 1 – Intruduzione shell unix,file system,utenti,gruppi
Vai alla parte 2 – Piping e Redirect;