Avanti Indietro Indice

11. Tavole

11.1 Operatori di confronto tra stringhe

(1) s1 = s2

(2) s1 != s2

(3) s1 < s2

(4) s1 > s2

(5) -n s1

(6) -z s1

(1) s1 corrisponde a s2

(2) s1 non corrisponde a s2

(3) __TO-DO__

(4) __TO-DO__

(5) s1 non è vuota (contiene uno o più caratteri)

(6) s1 è vuota

11.2 Esempi di confronto tra stringhe

Confrontare due stringhe.

        #!/bin/bash
        S1='string'
        S2='String'
        if [ $S1=$S2 ];
        then
                echo "S1('$S1') is not equal to S2('$S2')"
        fi
        if [ $S1=$S1 ];
        then
                echo "S1('$S1') is equal to S1('$S1')"
        fi
        

Riporto qui una nota da una mail, inviata da Andreas Beck, in riferimento all'uso di if [ $1 = $2 ].

Non è proprio una buona idea, dato che se una tra $S1 ed $S2 è vuota, riceverai un errore di sintassi. x$1=x$2 oppure "$1"="$2" vanno meglio.

11.3 Operatori aritmetici

+

-

*

/

% (resto della divisione)

11.4 Operatori aritmetici relazionali

-lt (<)

-gt (>)

-le (<=)

-ge (>=)

-eq (==)

-ne (!=)

I programmatori in C dovrebbero limitarsi a mappare l'operatore alla parentesi corrispondente.

11.5 Comandi utili

Questa sezione è stata riscritta da Kees (vedi Grazie a...)

Alcuni di questi comandi quasi prevedono completi linguaggi di programmazione. Per tali comandi saranno spiegate soltanto le basi. Per una descrizione più dettagliata, ti consiglio una lettura più approfondita alle pagine man di ciascun comando.

sed (stream editor)

Sed è un editor non interattivo. Invece di alterare un file muovendo il cursore sullo schermo, usi uno script di istruzioni di editing per sed, più il nome del file da editare. Puoi considerare sed anche come un filtro. Diamo un'occhiata ad alcuni esempi:

        $sed 's/vecchio_testo/testo_che_lo_sostituisce/g' /tmp/dummy
        

Sed rimpiazza la stringa 'vecchio_testo' con la stringa 'testo_che_lo_sostituisce' e legge dal file /tmp/dummy. Il risultato sarà inviato a stdout (normalmente la consolle) ma puoi anche aggiungere '> cattura' alla fine della riga qua sopra così che sed invii l'output al file 'cattura'.

        $sed 12, 18d /tmp/dummy
        

Sed mostra tutte le righe tranne quelle da 12 a 18. Il file originale non è alterato da questo comando.

awk (manipolazione di datafile, recuperare testo e processarlo)

Esistono molte implementazioni del linguaggio di programmazione AWK (gli interpreti più conosciuti sono gawk della GNU e 'new awk' mawk.) Il principio è semplice: AWK ricerca un modello, e per ogni corrispondenza verrà compiuta una azione.

Di nuovo, ho creato un file dummy contente le seguenti righe:

"test123

test

tteesstt"

        $awk '/test/ {print}' /tmp/dummy
        

test123

test

Il modello cercato da AWK è 'test' e l'azione che compie quando trova una riga nel file /tmp/dummy con la stringa 'test' è 'print' (stampa, ndt).

        $awk '/test/ {i=i+1} END {print i}' /tmp/dummy
        

3

Quando stai cercando più di un modello, sarebbe meglio se sostituissi il testo tra apici con '-f file.awk' così da poter inserire tutti i modelli e le azioni nel file 'file.awk'.

grep (stampa righe che corrispondono ad un modello di ricerca)

Abbiamo già incontrato un paio di comandi grep nei capitoli precedenti, che mostrano le righe corrispondenti ad un modello. Ma grep sa fare di più.

        $grep "la sto cercando" /var/log/messages -c
        

12

La stringa "la sto cercando" è stata trovata 12 volte nel file /var/log/messages.

[ok, questo esempio era uno scherzo, il file /var/log/messages era preparato :-)]

wc (conta righe, parole e byte)

Nell'esempio seguente, notiamo che l'output non è quello che ci aspettavamo. Il file dummy, così come è usato in questo esempio, contiene il seguente testo: "bash introduction howto test file"

        $wc --words --lines --bytes /tmp/dummy
        

2 5 34 /tmp/dummy

Wc non si cura dell'ordine dei parametri. Wc li stampa sempre nell'ordine standard, cioè, come puoi vedere: <righe><parole><byte><nomefile>.

sort (ordina le righe dei file di testo)

Questa volta il file dummy contiene il seguente testo:

"b

c

a"

        $sort /tmp/dummy
        

Ecco come dovrebbe apparire l'output:

a

b

c

I comandi non dovrebbero essere così semplici :-)

bc (un linguaggio di programmazione che fa da calcolatrice)

Bc accetta calcoli dalla riga di comando (input da un file. Non da un operatore di redirezione e da una pipe), ma anche da una interfaccia utente. La seguente dimostrazione presenta alcuni dei comandi. Osserva che io lancio

bc usando il parametro -q per evitare un messaggio di benvenuto.

   $bc -q
        

1 == 5

0

0.05 == 0.05

1

5 != 5

0

2 ^ 8

256

sqrt(9)

3

while (i != 9) {

i = i + 1;

print i

}

123456789

quit

tput (inizializza un terminale o interroga il database di terminfo)

Una piccola dimostrazione delle capacità di tput:

        $tput cup 10 4
        

Il prompt appare a (y10,x4).

        $tput reset
        

Pulisce lo schermo e il prompt appare a (y1,x1). Nota che (y0,x0) è l'angolo in alto a sinistra.

        $tput cols
        
80

Mostra il numero di caratteri possibili in direzione x.

È vivamente raccomandato di familiarizzare con questi programmi (al meno ). Ci sono tonnellate di piccoli programmi che ti permetteranno di fare delle vere magie dalla riga di comando.

[alcuni esempi sono tratti da pagine man o FAQ]


Avanti Indietro Indice