Micro corso Bash Unix/Linux – Parte 2


bash

In questa parte del tutorial vedremo come effettuare il Piping e il Redirect dei comandi. Ovviamente il tutto è corredato da un insieme di esempi a fini esplicativi!!

PIPING E REDIRECT

Poiché i comandi Unix sono dei “filtri” è possibile redirigere l’output di un comando verso altre destinazioni (file, stdin, stdout):

comando < file_input&#91;/shell&#93; utilizza file_input come standard input. Di solito lo standard input è la tastiera; &#91;shell&#93;comando > file_output

scrive l’output del programma su file;

comando >> file_output

scrive l’output del programma sul file in append.

ESEMPI

ls /home/user/documenti/ > contenutodirectory

scrive la lista dei file della directory corrente, all’interno del file contenutodirectory;

sort file2 

ordina il contenuto di file1 e lo scrive su file2;

E’ possibile utilizzare lo standard output di un comando come standard input di un altro (Piping). Per scrivere una serie di comandi in piping bisogna utilizzare l’operatore “|” .

ESEMPI

ls ./ | grep documenti

cerca tra i file contenuti nel direttorio quelli che si chiamano “documenti”;

who | wc -l > num_utenti

who preleva il numero di utenti, wc conta il numero di parole nella lista, il risultato viene scritto sul file num_utenti;

ls | rev

lista dei file sul direttorio corrente in ordine invertito.

METACARATTERI ED ESPANSIONE

La shell unix riconosce dei caratteri speciali:

  • * : uno o una sequenza qualsiasi di caratteri contenuti nel nome di un file;
  • ? : un carattere qualsiasi;
  • [zfc] : un carattere qualsiasi tra ‘z’,’f’,’c’, nel nome di un file;
  • [a-g] : qualsiasi carattere compreso tra ‘a’ e ‘g’ nel nome di un file;
  • \ : escape, il carattere successivo viene interpretato come un normale carattere;
  • ` ` : backquote, tutto ciò che c’è al loro interno viene interpretato come se fosse un comando (si scrivono schiacciano alt destro + apostrofo);
  • “ ” : inibisce l’interpretazione di *, ?, [ ], < , > , >>, !
  • # : commento
  • #! : all’inizio del file indica quale programma utilizzare per interpretare il file di testo

ESEMPI DI ESPANSIONE

ls *.*

ritorna tutti i file che contengono al loro interno un punto.
In questo caso, quindi, il comando riconosce ciao.exe ,  ecco.jpg ma non riconoscerà né .ciao né tantomeno ecco. poiché il metacarattere * indica una sequenza di UNO o più caratteri;

ls Foto????-??-??

filtra, ad esempio, il file Foto2001-01-10 ma non Foto2001-1-10;

Tutte le variabili shell sono STRINGHE. Il loro valore si riferisce come $var.
Per forzare l’interpretazione di una variabile come se fosse un numero è necessario utilizzare il comando expr!

ESEMPI

X=2 # X vale 2 (attenzione perchè per gli assegnamenti NON BISOGNA UTILIZZARE MAI SPAZI!!!

echo $X # stampa “2”

echo X # stampa “X”

echo `expr 1 + 3` # stampa “4”

echo expr 1 + 3 # stampa “expr 1 + 3”

Se non utilizzo i backquote “expr 1 + 3” non viene sostituito con il risultato del comando e viene, quindi, interpretato come se fosse una stringa!!!

echo “<`pwd`>” # stampa “”

Da notare che i doppi apici hanno evitato che l’interprete effettuasse una redirezione dell’input e dell’output!!!

In generale l’interprete shell sostituisce i vari caratteri speciali come segue:

  1. Redirezione dell’input e dell’output ( echo > hello );
  2. Sostituzione backquote con risultato dei comandi ( `pwd` viene sostituito con “/home/user/documenti/”);
  3. Sostituzione di variabili ( $HOME viene sostituito con “/home/Michele/”);
  4. Sostituzione dei metacaratteri ( ci*o viene sostituito con “ciao” e “ciano”);

Vai alla parte 1 – Intruduzione shell unix,file system,utenti,gruppi
Vai alla parte 3 – Costrutti IF-FOR-WHILE, Riepilogo comandi


Lascia un commento!