(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
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.
+
-
*
/
% (resto della divisione)
-lt (<)
-gt (>)
-le (<=)
-ge (>=)
-eq (==)
-ne (!=)
I programmatori in C dovrebbero limitarsi a mappare l'operatore alla parentesi corrispondente.
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]