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 nella lista dei files ,… |
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 -opz | 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 (Vai alla parte 1 – Intruduzione shell unix,file system,utenti,gruppi
Vai alla parte 2 – Piping e Redirect;