Bash scripting - comandi essenziali: differenze tra le versioni

aggiunta parte per sovrascrivere echo, spostate le condizioni avanzate
(aggiunti esempi e altre opzioni)
(aggiunta parte per sovrascrivere echo, spostate le condizioni avanzate)
Riga 77: Riga 77:
<pre>
<pre>
printf %s\\n "ERRORE: il file specificato non esiste!" >&2  # standard error
printf %s\\n "ERRORE: il file specificato non esiste!" >&2  # standard error
</pre>
====Sovrascrivere echo====
Se non si riesce a fare a meno di <code>echo</code> si può sovrascriverlo per gli usi più basilari, così da utilizzare al suo posto <code>printf</code> in modo trasparente, mettendo queste definizioni in cima allo script subito dopo lo ''shebang'':
<pre>
# sovrascrivo echo
# stampa su schermo con "a capo" finale
echo () { printf %s\\n "$*" ; }
# rimpiazzo per echo -n
# stampa su schermo senza "a capo" finale)
echo_n () { printf %s "$*" ; }
</pre>
Per esempio:
<pre>
#! /bin/bash
# sovrascrivo echo
echo () { printf %s\\n "$*" ; }
# al posto di echo -n
echo_n () { printf %s "$*" ; }
# ora si può usare echo (echo_n) al posto di printf %s\\n (printf %s)
echo "Hello World!"  # stampa: Hello World!
echo_n "Hello world!" # stampa: Hello world! (senza "a capo")
echo -n              # stampa: -n
echo -e              # stampa: -e
exit 0
</pre>
</pre>


Riga 118: Riga 150:
* <code>[ "$var" -lt valore ]</code>: ('''l'''ower '''t'''han) vero se l'intero contenuto nella variabile è inferiore del valore dato.
* <code>[ "$var" -lt valore ]</code>: ('''l'''ower '''t'''han) vero se l'intero contenuto nella variabile è inferiore del valore dato.
* <code>[ "$var" -le valore ]</code>: ('''l'''ower or '''e'''qual to) vero se l'intero contenuto nella variabile è inferiore o uguale al valore dato.
* <code>[ "$var" -le valore ]</code>: ('''l'''ower or '''e'''qual to) vero se l'intero contenuto nella variabile è inferiore o uguale al valore dato.
Se una delle due stringhe non è un intero, anche negativo, il confronto fallisce e può esserci la stampa di un messaggio d'errore sullo standard error. Per evitarlo va aggiunto <code>2> /dev/null</code> (il significato di tale redirezione sarà trattato in seguito).
Se una delle due stringhe non è un intero, anche negativo, il confronto fallisce e può esserci la stampa di un messaggio d'errore sullo standard error. Per evitarlo va aggiunto '''2> /dev/null''' (il significato di tale redirezione sarà trattato in seguito).


Per esempio:
Per esempio:
Riga 133: Riga 165:
* <code>[ -w "$var" ]</code>: vero se il file esiste e l'utente corrente ha il permesso di scrittura;
* <code>[ -w "$var" ]</code>: vero se il file esiste e l'utente corrente ha il permesso di scrittura;
* <code>[ -x "$var" ]</code>: vero se il file esiste e l'utente corrente ha il permesso di esecuzione (o attraversamento per le directory).
* <code>[ -x "$var" ]</code>: vero se il file esiste e l'utente corrente ha il permesso di esecuzione (o attraversamento per le directory).
====Condizioni più avanzate====
Le espressioni più complesse si possono comporre utilizzando gli operatori logici <code>&&</code> e <code>||</code> per aggregare più istruzioni <code>[...]</code>, e le parentesi <code>{ ... ; }</code> per determinarne la priorità, come si vedrà nella parte sui blocchi di istruzioni.
Per ora basti sapere che possono essere aggregate con <code>||</code> (''OR'' logico) e <code>&&</code> (''AND'' logico):
<pre>
# Controlla che la variabile sia un intero (positivo o negativo)
[ "$var" -ge 0 ] 2> /dev/null || [ "$var" -lt 0 ] 2> /dev/null
[ "$var" -ne 0 ] 2> /dev/null || [ "$var" -eq 0 ] 2> /dev/null # equivalente
[ "$var" -ne 0 ] 2> /dev/null || [ "$var" = 0 ]                # equivalente
# Controlla che il file regolare esista e sia leggibile
[ -f "$var" ] && [ -r "$var" ]
# Controlla che il file regolare esista e sia eseguibile
# (permesso di lettura + esecuzione)
[ -f "$var" ] && [ -r "$var" ] && [ -x "$var" ]
# Controlla che la directory esista e sia possibile listarne il contenuto
# (per sapere se un file esiste nella directory)
[ -d "$var" ] && [ -r "$var" ]
# Controlla che la directory esista e sia possibile accederne il contenuto
# (leggendo o scrivendo i file, se i loro permessi lo consentono)
[ -d "$var" ] && [ -x "$var" ]
# Controlla che la directory esista e sia possibile listarne e accederne il contenuto
[ -d "$var" ] && [ -r "$var" ] && [ -x "$var" ]
# Controlla che la directory esista e sia possibile creare e cancellare i file contenuti, e modificarne i permessi
# (permesso di attraversamento + scrittura)
[ -d "$var" ] && [ -x "$var" ] && [ -w "$var" ]
# Controlla che la directory esista e sia possibile cancellarla, eliminandone ricorsivamente il contenuto
# (permesso di lettura, per listarne il contenuto, + attraversamento + scrittura come il caso precedente)
[ -d "$var" ] && [ -r "$var" ] && [ -x "$var" ] && [ -w "$var" ]
</pre>


===Esecuzione condizionata===
===Esecuzione condizionata===
3 581

contributi