[Tech] Bash ed espressioni booleane

Claudio Cicali c.cicali@mclink.it
Gio 31 Ago 2000 09:56:33 CEST


At 03:30 AM 8/31/00 +0200, you wrote:
>Devo controllare i parametri di input di uno script, ma mi sto un po'
>"annodando" con la grammatica booleana di Bash, soprattutto per il fatto
>che gli operatori AND ed OR hanno pari precedenza. Quello che vorrei
>ottenere è questo (scritto in notazione "canonica"):
>
>if [$#=3] and ([$1='-txt'] or [$1='-html']) and [-f $2] and [$2!=$3]
>     then "fai qualcosa"
>
>Io avevo provato con questo:
>
>if [ $1 = '-txt' ] || [ $1 = '-html' ] && [ $# = 3 ] && [ -f $2 ] && [
>$2 != $3 ]
>     then "fai qualcosa"
>
>...purtroppo non funziona in quanto se non immettiamo alcun parametro i
>test [ $1 = '-txt' ] e [ $1 = '-html' ] generano un messaggio di errore
>su standard-error. Il test [ $# = 3 ] va dunque eseguito all'inizio.
>Come la risolvereste voi? Grazie.
>
>PS: so bene che è possibile risolvere il problema nidificando una serie
>di if...then, mi sto solo chiedendo se è possibile farne a meno.

"Come la risolvereste voi"
Cosi':
Al di la' del valore accademico della questione a me sembra che in
ogni caso vada sempre prima controllato la validita' dei parametri
e successivamente, in base ai parametri, decidere il da farsi.
Fare tutto in un'unica riga non e' ne' bello ne' funzionale (come
in effetti ti sei accorto).
Piu' che le if nidificate spezzerei il tutto in questo modo

if <il numero dei parametri e' errato>
   usage()  <----- spiega la sintassi e muore

if <il valore del parametro N e' errato>
   usage()

<elaborazione>

ciao




+-------------------+
|Claudio Cicali     | When I hear somebody sigh, "Life is hard"
|c.cicali@mclink.it | I am always tempted to ask, "Compared to what?"
+ ------------------+                          - Sydney J. Harris






Maggiori informazioni sulla lista flug-tech