- Concetti base
La prima riga dello script tipicamente contiene solo #!/bin/bash per far capire al sistema di essere uno script bash; generalmente è buona norma usare l'estensione .sh anche se si marca come eseguibile con qualcosa tipo chmod 755 script.sh
Ogni comando restituisce un codice di errore da 0 a 255, con 0 che significa "OK". Uno script restituisce 0 quando termina, a meno di non voler concludere prima (esempio: exit 3).
- Variabili
DINA=nitroUna variabile si può riempire con l'output di un programma, usando gli apici inversi (i caratteri "a capo" verranno sostituiti con degli spazi):
MITE=glicerina
echo faccio esplodere $DINA$MITE, non trovo la $MITE
QUANTE_RIGHE=`wc -l < file.log`
- Argomenti da command-line
if [ $# != 3 -o "$1" == "--help" ]Visto che la command-line è a disposizione di utenti tonti, conviene usare sempre ossessivamente le virgolette per evitare che spazi o apici facciano brutte sorprese:
then
echo Errore 1: questo script bash richiede tre parametri
exit 1
fi
echo terzo parametro: "$3"
TEMPFILE="/tmp/$2"
./comando > "$TEMPFILE"
- Come si controlla l'uscita con errore
rm file.log || echo Errore, file non cancellato: proseguo lo stesso...
Versione breve: "if comando... then... fi"
if ./bin/prog3
then
echo OK
else
echo errore di sbaglio...
fi
Versione lunga: "comando... ERR=$? ...if then fi"
./bin/prog1
ERR=$?
if [ $ERR != 0 ]
then
echo Errore $ERR, interrompo lo script
exit $ERR
fi
echo OK, proseguo normalmente...
./bin/prog2
Condizioni tipiche
"Se file.log esiste, allora esegui questo":
if [ -f file.log ]"Se non esiste, allora esegui quest'altro":
then
./bin/questo
fi
if [ ! -f file.log ]"Se esistono tale directory e tale file allora..." (occhio: quel "-a" significa AND)
then
./bin/quest_altro
fi
if [ -d ../logdir -a -f altradir/file.log ]"Se il file esiste e non è vuoto (zero bytes)":
then
echo sposto il file...
mv altradir/file.log ../logdir
fi
if [ ! -s file.log ]"Se il file contiene almeno 20 righe" (occhio: il "-ge" significa Greater Than):
then
./bin/controlla file.log
fi
FILE=../file.logAltri dettagli qui.
RIGHE=`wc -l < $FILE`
ERR=$?
if [ $ERR != 0 ]
then
echo Errore su $FILE
exit 5
fi
if [ $RIGHE -ge 20 ]
then
./prog3 $FILE
fi
Come si fanno i loop
Con "while condizione... do comandi... (break...) done" (per un loop continuo si usa "true"):
while truePure i cicli for, se hai una breve lista:
do
if ./bin/programma1
then
sleep 30
else
ERR=$?
break
fi
done
for EXT in jpg jpeg png mp4 mp3
do
rm *.$EXT # SBRANGGGG!!!
done
for FILE in ./films/*
do
rm "$FILE" # SBRANGGGGGG!!!
done
Nessun commento:
Posta un commento