GNU Bash e' sicuramente tra le shell piui potenti disponibili per sistemi *nix (e, con qualche modifica anche per sistemi Windows).

Alcune funzionalita' pero' non sono molto note, pur essendo comodissime. Facciamo un piccolo riassunto:

Navigare nelle directory

  • Digitanto cd senza parametri, si entra nella propria home directory
  • La home directory puo' essere richiamata nei parametri di un comando/script con la variabile d'ambiente ~
  • Per tornare alla directory visitata precedentemente, si utilizza cd -
  • Con i comandi pushd e popd si puo' creare uno storico delle directory visitate: in pratica, utilizzando pushd al posto del comando cd e' possibile salvare il percorso effettuato in una coda LIFO (Last input, First output), richiamabile in qualsiasi momento con il comando popd (un po' come i sassolini di Pollicino :))

Riutilizzare gli argomenti

Bash memorizza l'ultimo argomento passato a un comando nella variabile d'ambiente $_. E' possibile quindi riutilizzarlo nei comandi successivi.

mkdir /home/andrea/pippocd $_

(creo la directory pippo e ci entro)

Storico dei comandi

Ricerca nello storico: digitanto CTRL+r e alcuni caratteri presenti nel comando da cercare, bash restituira' l'ultimo comando presente nello storico che soddisfa i criteri di ricerca.

Ricerca diretta: usando il carattere ! e' possibile richiamare un preciso comando dallo storico.

$ !-2

richiama ed esegue il penultimo comando eseguito mentre

$ !!

esegue l'ultimo.

Anche in questo caso si puo' effettuare una ricerca in base a un criterio, ad esempio

$ !tail

ricerca ed esegue l'ultimo comando nello storico iniziante con la stringa tail.

Se la ricerca deve essere eseguita non all'inizio ma all'interno del comando, la sintassi e' questa:

$ !?paroladacercare?

Editing

Con bash e' possibile editare la riga di comando utilizzando semplici combinazioni di tasti:

  • CTRL+a: Vai all'inizio delle linea
  • CTRL+e: Vai alla fine della linea
  • CTRL+k: Cancella fino dalla posizione corrente alla fine della linea
  • CTRL+u: Cancella fino dalla posizione corrente all'inizio della linea
  • CTRL+l: Pulisce lo schermo
  • META+f: Vai una parola avanti
  • META+b: Vai una parola indietro
  • META+d: Cancella la parola successiva
  • META+backspace: Cancella la parola precedente

Il tasto META puo' essere ottenuto in 2 modi: tenendo premuto il tasto ALT e il tasto di comando, oppure premendo e rilasciando il tasto ESC e successivamente il pulsante di comando.

Storico dei parametri

E' possibile richiamare lo storico dei parametri passati ai comandi precedenti con la combinazione META+.

Variabili Speciali

  • $? : contiene il valore di uscita dell'ultimo comando eseguito (0=nessun errore, qualsiasi altro valore e' il codice dell'errore verificatosi)
  • $@ : contiene la lista dei parametri passati allo script. Esempio:

LISTA_FILES=$@

for file in $LISTA_FILES; do cat $file done

Visualizza il contenuto di tutti i file i cui nomi sono stati passati come parametro allo script.

  • $$ : restituisce il PID del processo corrente
  • $! : restituisce il PID dell'ultimo processo posto in background

Uso e manipolazione delle stringhe

Senza dover fare ricorso a programmi esterni come sed e awk, e' possibile operare semplici operazioni sulle stringhe direttamente con bash.

In bash la stringa viene trattata come una variabile, puo' essere quindi richiamata con $nome_variabile o con la sintassi ${nome_variabile}. Quest'ultima permette di includere nelle parentesi graffe un modificatore per alterare il contenuto della stringa.

Gli operatori fondamentali sono 3:

  • # sottrae dall'inizio della stringa

VAR="stringa-di-test"echo ${VAR#stringa-}

elimina "stringa-" dall'inizio della stringa, restituendo "di-test"

  • % sottrae alla fine della stringa

VAR="stringa-di-test"echo ${VAR%-test}

elimina "-test" dalla fine della stringa, restituendo "stringa-di"

  • / sostituisce una stringa con un'altra (solo la prima occorrenza)

VAR="stringa-di-test"echo ${VAR/di/da}

restituisce "stringa-da-test"

Nel caso del modificatore / e' possibile operare la sostituzione sull'intera stringa utilizzando al suo posto //.

Articolo di riferimento: in HTML e in PDF