Micro corso Bash Unix/Linux – Parte 3


bashIn 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 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 (<) da file! Vai alla parte 1 – Intruduzione shell unix,file system,utenti,gruppi
Vai alla parte 2 – Piping e Redirect;


Lascia un Commento!