Sophie

Sophie

distrib > Mandriva > 9.1 > i586 > by-pkgid > f1098342ec4a2b28475e34123ce17201 > files > 69

howto-html-it-9.1-0.5mdk.noarch.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<HTML>
<HEAD>
 <META NAME="GENERATOR" CONTENT="SGML-Tools 1.0.9">
 <TITLE>BASH Programming  - Introduction HOWTO: Tavole</TITLE>
 <LINK HREF="Bash-Prog-Intro-HOWTO-12.html" REL=next>
 <LINK HREF="Bash-Prog-Intro-HOWTO-10.html" REL=previous>
 <LINK HREF="Bash-Prog-Intro-HOWTO.html#toc11" REL=contents>
</HEAD>
<BODY>
<A HREF="Bash-Prog-Intro-HOWTO-12.html">Avanti</A>
<A HREF="Bash-Prog-Intro-HOWTO-10.html">Indietro</A>
<A HREF="Bash-Prog-Intro-HOWTO.html#toc11">Indice</A>
<HR>
<H2><A NAME="s11">11. Tavole</A>        </H2>

<H2><A NAME="ss11.1">11.1 Operatori di confronto tra stringhe</A>
    </H2>

<P> (1) s1 = s2
<P> (2) s1 != s2
<P> (3) s1 &lt; s2
<P> (4) s1 > s2
<P> (5) -n s1 
<P> (6) -z s1 
<P> 
<P> (1) s1 corrisponde a s2
<P> (2) s1 non corrisponde a s2
<P> (3) __TO-DO__
<P> (4) __TO-DO__
<P> (5) s1 non &egrave; vuota (contiene uno o pi&ugrave; caratteri)
<P> (6) s1 &egrave; vuota 
<H2><A NAME="ss11.2">11.2 Esempi di confronto tra stringhe</A>
        </H2>

<P> Confrontare due stringhe. 
<BLOCKQUOTE><CODE>
<PRE>
        #!/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
        
</PRE>
</CODE></BLOCKQUOTE>
<P> Riporto qui una nota da una mail, inviata da Andreas Beck, in riferimento
all'uso di 
<I>if [ $1 = $2 ]</I>.
<P> Non &egrave; proprio una buona idea, dato che se una tra $S1 ed $S2 &egrave; vuota, 
riceverai un errore di sintassi. x$1=x$2 oppure "$1"="$2" vanno meglio.
<P>
<H2><A NAME="ss11.3">11.3 Operatori aritmetici</A>
    </H2>

<P> +
<P> -
<P> *
<P> /
<P> % (resto della divisione)
<H2><A NAME="ss11.4">11.4 Operatori aritmetici relazionali</A>
    </H2>

<P> -lt (&lt;) 
<P> -gt (>)
<P> -le (&lt;=)
<P> -ge (>=)
<P> -eq (==)
<P> -ne (!=)
<P> I programmatori in C dovrebbero limitarsi a mappare l'operatore alla
parentesi corrispondente.
<H2><A NAME="ss11.5">11.5 Comandi utili</A>
         </H2>

<P> Questa sezione &egrave; stata riscritta da Kees (vedi Grazie a...) 
<P> Alcuni di questi comandi quasi prevedono completi linguaggi di
programmazione. 
Per tali comandi saranno spiegate soltanto le basi. Per una descrizione pi&ugrave;
dettagliata, ti consiglio una lettura pi&ugrave; approfondita alle pagine man di
ciascun comando.
<P><B>sed</B> (stream editor) 
<P>
<P> Sed &egrave; un editor non interattivo. Invece di alterare un file muovendo il
cursore sullo schermo, usi uno script di istruzioni di editing per sed, pi&ugrave;
il nome del file da editare. Puoi considerare sed anche come un filtro. 
Diamo un'occhiata ad alcuni esempi:
<P>
<BLOCKQUOTE><CODE>
<PRE>
        $sed 's/vecchio_testo/testo_che_lo_sostituisce/g' /tmp/dummy
        
</PRE>
</CODE></BLOCKQUOTE>
<P>
<P> Sed rimpiazza la stringa 'vecchio_testo' con la
stringa 'testo_che_lo_sostituisce' e legge dal file /tmp/dummy. Il risultato sar&agrave;
inviato a stdout (normalmente la consolle) ma puoi anche
aggiungere '> cattura' alla fine della riga qua sopra cos&igrave; che sed invii l'output al
file 'cattura'.
<P>
<BLOCKQUOTE><CODE>
<PRE>
        $sed 12, 18d /tmp/dummy
        
</PRE>
</CODE></BLOCKQUOTE>
        
<P>
<P> Sed mostra tutte le righe tranne quelle da 12 a 18. Il file originale
non &egrave; alterato da questo comando.
<P><B>awk</B> (manipolazione di datafile, recuperare testo e processarlo)
<P>
<P> Esistono molte implementazioni del linguaggio di programmazione AWK
(gli interpreti pi&ugrave; conosciuti sono gawk della GNU e 'new awk' mawk.) Il
principio &egrave; semplice: AWK ricerca un modello, e per ogni corrispondenza
verr&agrave; compiuta una azione.
<P> Di nuovo, ho creato un file dummy contente le seguenti righe:
<P> <I>"test123</I>
<P> <I>test</I>
<P> <I>tteesstt"</I>
<P>
<BLOCKQUOTE><CODE>
<PRE>
        $awk '/test/ {print}' /tmp/dummy
        
</PRE>
</CODE></BLOCKQUOTE>
<P> test123
<P>
<P> test
<P>
<P> Il modello cercato da AWK &egrave; 'test' e l'azione che compie quando trova
una riga nel file /tmp/dummy con la stringa 'test' &egrave; 'print' (stampa, ndt).
<P>
<BLOCKQUOTE><CODE>
<PRE>
        $awk '/test/ {i=i+1} END {print i}' /tmp/dummy
        
</PRE>
</CODE></BLOCKQUOTE>
<P>
<P> 3
<P>
<P> Quando stai cercando pi&ugrave; di un modello, sarebbe meglio se sostituissi il
testo tra apici con '-f file.awk' cos&igrave; da poter inserire tutti i modelli e 
le azioni nel file 'file.awk'.
<P><B>grep</B> (stampa righe che corrispondono ad un modello di ricerca)
<P>
<P> Abbiamo gi&agrave; incontrato un paio di comandi grep nei capitoli precedenti,
che mostrano le righe corrispondenti ad un modello. Ma grep sa fare di
pi&ugrave;.
<BLOCKQUOTE><CODE>
<PRE>
        $grep "la sto cercando" /var/log/messages -c
        
</PRE>
</CODE></BLOCKQUOTE>
<P> 12
<P> La stringa "la sto cercando" &egrave; stata trovata 12 volte nel file
/var/log/messages.
<P> [ok, questo esempio era uno scherzo, il file /var/log/messages era
preparato :-)]
<P><B>wc</B> (conta righe, parole e byte)
<P>
<P> Nell'esempio seguente, notiamo che l'output non &egrave; quello che ci
aspettavamo. Il file dummy, cos&igrave; come &egrave; usato in questo esempio, contiene il
seguente testo:
<I>"bash introduction</I>
<I> howto test file"</I>
<P>
<BLOCKQUOTE><CODE>
<PRE>
        $wc --words --lines --bytes /tmp/dummy
        
</PRE>
</CODE></BLOCKQUOTE>
<P>
<P> 2 5 34 /tmp/dummy
<P>
<P> Wc non si cura dell'ordine dei parametri. Wc li stampa sempre nell'ordine
standard, cio&egrave;, come puoi vedere: &lt;righe>&lt;parole>&lt;byte>&lt;nomefile>.
<P><B>sort</B> (ordina le righe dei file di testo)
<P>
<P> Questa volta il file dummy contiene il seguente testo:
<P> <I>"b</I>
<P> <I>c</I>
<P> <I>a"</I>
<BLOCKQUOTE><CODE>
<PRE>
        $sort /tmp/dummy
        
</PRE>
</CODE></BLOCKQUOTE>
<P>
<P> Ecco come dovrebbe apparire l'output:
<P>
<P> <I>a</I>
<P> <I>b</I>
<P> <I>c</I>
<P>
<P> I comandi non dovrebbero essere cos&igrave; semplici :-)
<P><B>bc</B> (un linguaggio di programmazione che fa da calcolatrice)
<P>
<P> 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
<P> bc usando il parametro -q per evitare un messaggio di benvenuto.
<P>
<BLOCKQUOTE><CODE>
<PRE>
   $bc -q
        
</PRE>
</CODE></BLOCKQUOTE>
<P>
<P> <I>1 == 5</I>
<P> <I>0</I>
<P> <I>0.05 == 0.05</I>
<P> <I>1</I>
<P> <I>5 != 5</I>
<P> <I>0</I>
<P> <I>2 ^ 8</I>
<P> <I>256</I>
<P> <I>sqrt(9)</I>
<P> <I>3</I>
<P> <I>while (i != 9) {</I>
<P> <I>i = i + 1;</I>
<P> <I>print i</I>
<P> <I>}</I>    
<P> <I>123456789</I>
<P> <I>quit</I>
<P><B>tput</B> (inizializza un terminale o interroga il database di terminfo)
<P>
<P> Una piccola dimostrazione delle capacit&agrave; di tput:
<BLOCKQUOTE><CODE>
<PRE>
        $tput cup 10 4
        
</PRE>
</CODE></BLOCKQUOTE>
<P> Il prompt appare a (y10,x4).
<BLOCKQUOTE><CODE>
<PRE>
        $tput reset
        
</PRE>
</CODE></BLOCKQUOTE>
<P> Pulisce lo schermo e il prompt appare a (y1,x1). Nota che (y0,x0) &egrave;
l'angolo in alto a sinistra.
<BLOCKQUOTE><CODE>
<PRE>
        $tput cols
        
</PRE>
</CODE></BLOCKQUOTE>

<I>80</I>
<P> Mostra il numero di caratteri possibili in direzione x.
<P> &Egrave; 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.
<P> [alcuni esempi sono tratti da pagine man o FAQ]
<HR>
<A HREF="Bash-Prog-Intro-HOWTO-12.html">Avanti</A>
<A HREF="Bash-Prog-Intro-HOWTO-10.html">Indietro</A>
<A HREF="Bash-Prog-Intro-HOWTO.html#toc11">Indice</A>
</BODY>
</HTML>