Introduzione alla Bash

Loris Tissino

15 maggio 2009

Tips and tricks

Esiste l'autocompletamento:

pdf[tab][tab]
ls /etc/a[tab][tab]

Esistono scorciatoie:

Struttura dei comandi

La struttura base dei comandi è la seguente:

Alcuni esempi:

/bin/cat -n /etc/services
cat --number /etc/services
tar xvzf archivio.tgz     # diverso da tar xvfz archivio.tgz, non corretto
tar -xvzf archivio.tgz
tar -x -v -z -f archivio.tgz
tar --extract --verbose --ungzip --file archivio.tgz
LC_TIME=POSIX cal

ls unarchivio -l          # possibile
chmod unarchivio +x       # errato

Pagine man

Una pagina man ha normalmente le seguenti sezioni:

I/O standard

Esistono tre file standard per l'I/O:

Esempio:

cal > calendario
sort < calendario
ls /directory_non_esistente 2> errore

Pipeline

Le pipeline servono a far sì che l'output di un programma diventi l'input di un altro programma:

getent services | sort
getent passwd | grep bash | wc -l

Filtri

Molti programmi agiscono da filtro:

Alcuni esempi:

cal | tac
cal | rev
cal | tac | rev
getent passwd | cut -d: -f1 | tail -3
who | wc -l

Comandi interattivi

I programmi interattivi non esauriscono il loro compito senza intervento dell'utente:

getent passwd | more
getent services | less
man passwd
man 5 passwd

Funzionamento alternativo

Molti programmi possono agire in diverso modo a seconda del modo in cui sono invocati:

Alcuni esempi:

grep testo miofile
grep testo > miofile
cat miofile | grep testo

StdIn e StdOut come file binari

A differenza di quanto avviene nel mondo dos/windows, i file di standard input e di standard output possono essere file binari di contenuto arbitrario.

Ad esempio, si può usare cat per concatenare "pezzi" di file binario (ottenuti con split) e ricostruire l'originale.

$ split --bytes 2000 --numeric-suffixes /usr/bin/cal
$ ls
x00  x01  x02  x03  x04  x05
$ cat x* > my_cal
$ ls
my_cal x00  x01  x02  x03  x04  x05

Attenzione ai nomi

Alcune cose a cui è necessario prestare attenzione:

Esempi:

touch un\ nome\ con\ spazi
touch "un altro nome con spazi"
touch 'un terzo nome con spazi'

Unione dell'output di più programmi

A volte può essere necessario considerare l'output di due programmi come unico, per le elaborazioni successive.

(cal 2006; cal 2007) | tr [:lower:] [:upper:]

Il comando tee

A volte può essere necessario salvare su file l'output di un programma, mantenendo l'uscita comunque sullo standard output, per le elaborazioni successive.

(cal 2006; cal 2007) | tee copia | tr [:lower:] [:upper:]

Esercizi

Alcuni esercizi: