Automatizzare script bash

2007-08-23 Per discussione shacky
Ciao a tutti.

Nel solito script Bash che sto scrivendo (che mi servirà per creare
automaticamente delle macchine virtuali Xen partendo da immagini
preconfezionate) ho inserito questo pezzo per impostare la scelta
dell'immagine da utilizzare:

if [ $IMMAGINE ]; then
  case $IMMAGINE in
etch-minimal) IMG_ORIGINE=/vserver/img/debian-minimal.img ;;
*) immagini ;;
  esac
fi

La variabile $IMMAGINE è impostata da getopts in base all'argomento
dato al parametro -o.
In questo esempio, devo creare un case per ogni immagine .img che
creo in /vserver/img/.
immagini esegue una funzione presente nello stesso script che mostra
l'elenco delle immagini disponibili (in questo caso solo etch-minimal:

immagini () {
  echo Immagini disponibili:
  echo 
  echo   * etch-minimal: Debian 4.0 Etch minimale
  exit 1
}

Vorrei automatizzare la cosa, evitando di dover aggiungere, ogni volta
che aggiungo una nuova immagine, un nuovo case nella porzione di
codice di cui sopra.
In pratica, vorrei che lo script controllasse l'elenco dei file con
estensione .img presenti nella directory /vserver/img/, e in base al
loro nome impostare le varie immagini disponibili, in maniera
dinamica.
Inoltre, vorrei che se esiste un file /foo/[nome-immagine].post.sh,
questo venga eseguito ad un certo punto dell'esecuzione dello script,
senza che questo venga interrotto.

Non ho la più pallida idea di come si possano fare queste due cosette,
perchè non ho per nulla esperienza in bash.

Mi potete aiutare?

Grazie mille!
Ciao.



Re: Automatizzare script bash

2007-08-23 Per discussione Davide Corio
Il giorno gio, 23/08/2007 alle 19.08 +0200, shacky ha scritto:
 Ciao a tutti.
 
 Nel solito script Bash che sto scrivendo (che mi servirà per creare
 automaticamente delle macchine virtuali Xen partendo da immagini
 preconfezionate) ho inserito questo pezzo per impostare la scelta
 dell'immagine da utilizzare:

il pacchetto xen-tools l'hai già guardato?

-- 
Davide Corio
email: davide.corioatdomsense.com
web: http://www.domsense.com


-- 
Per REVOCARE l'iscrizione alla lista, inviare un email a 
[EMAIL PROTECTED] con oggetto unsubscribe. Per
problemi inviare un email in INGLESE a [EMAIL PROTECTED]

To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of unsubscribe. Trouble? Contact [EMAIL PROTECTED]



Re: Automatizzare script bash

2007-08-23 Per discussione Fabio Napoleoni
shacky ha scritto:
 Vorrei automatizzare la cosa, evitando di dover aggiungere, ogni volta
 che aggiungo una nuova immagine, un nuovo case nella porzione di
 codice di cui sopra.
 In pratica, vorrei che lo script controllasse l'elenco dei file con
 estensione .img presenti nella directory /vserver/img/, e in base al
 loro nome impostare le varie immagini disponibili, in maniera
 dinamica.

Puoi fare una cosa del tipo:

found=0

for img in `ls /vserver/img/*.img`
do
  if [ $img == $IMMAGINE ]; then
found=1
break
  fi
done

if [ ! found ]; then
  immagini
  exit 1
fi

# se arrivi qui c'è un valore valido in $IMMAGINE

 Inoltre, vorrei che se esiste un file /foo/[nome-immagine].post.sh,
 questo venga eseguito ad un certo punto dell'esecuzione dello script,
 senza che questo venga interrotto.

Questo è abbastanza facile supponendo che tu abbia il nome immagine in
una variabile $IMGNAME fai

if [ -x /foo/$IMGNAME.post.sh ]; then
source /foo/$IMGNAME.post.sh
fi

 Non ho la più pallida idea di come si possano fare queste due cosette,
 perchè non ho per nulla esperienza in bash.
 
 Mi potete aiutare?

Ti consiglio questi due capitoli di appunti di informatica libera [1] e
[2] e il bash programming howto [3]

Tieni presente che i frammenti di codice li ho buttati giù al volo e che
potrebbero darti problemi di sintassi, quindi magari vanno adattati un po.

Ciao

[1]http://a2.pluto.it/a2172.htm#almltitle1018
[2]http://a2.pluto.it/a2179.htm#almltitle1089
[3]http://tldp.org/HOWTO/Bash-Prog-Intro-HOWTO.html

-- 
Fabio Napoleoni
[EMAIL PROTECTED]


 Computer Science is no more about computers than astronomy is
 about telescopes
 Edsger W. Dijkstra



-- 
Per REVOCARE l'iscrizione alla lista, inviare un email a 
[EMAIL PROTECTED] con oggetto unsubscribe. Per
problemi inviare un email in INGLESE a [EMAIL PROTECTED]

To UNSUBSCRIBE, email to [EMAIL PROTECTED]
with a subject of unsubscribe. Trouble? Contact [EMAIL PROTECTED]