Scripting shell...
Ragazzi ho un problema col seguente scripting di shell.
Il mio problema è il seguente: il testo chiede che il numero di estensioni passate al programma, siano in numero qualsiasi! Come faccio a fare controllare al programma quelle estensioni?
Io ho implementato il programma così, però non so se è corretto. Mi potete aiutare, per favore, visto che domani ho esame?
################################################################################### #Si implementi uno script di shell che cancelli tutti i file con determinate # #estensioni a partire da una directory di ricerca. La sintassi è la seguente: # #del root_dir ext1 ext2 ..., dove # #-root_dir è la directory da cui iniziare la ricerca (si noti che la ricerca # # riguarda anche le sottodirectory di root_dir); # #-ext1, ext2, ... sono le estensioni dei file che vogliamo # # cancellare (in numero qualsiasi) # ###################################################################################
Il mio problema è il seguente: il testo chiede che il numero di estensioni passate al programma, siano in numero qualsiasi! Come faccio a fare controllare al programma quelle estensioni?
Io ho implementato il programma così, però non so se è corretto. Mi potete aiutare, per favore, visto che domani ho esame?
#!/bin/sh clear #mi pulisce semplicemente la shell if [ $# -le 1] #se il numero degli argomenti è minore o uguale a 1 #errore nell'uso del comando then echo "Errore nell'uso del comando" echo "Usare: $0 [directory] ext1 ext2 ......" exit 1 fi if [ ! -d $1] #se la directory non esiste errore! then echo "Errore: la directory non esiste" exit 1 else root_dir="$1" fi function delfile() { directory_corrente="$1" i="2" while [$i -lt $#] do estensione=$(ext\$i) for filename in `ls $directory_corrente/*.estensione` do echo "Rimuovo il file $filename" rm -f filename done done for filename in `ls $directory_corrente/*` #questo mi implementa la ricorsione! do #Se filename è una directory allora if [ -d "$filename" ] #la funzione delfile a questa sotto then #directory echo "$filename è una sotto directory!" delfile "$filename" fi done } delfile $1
Risposte
Punto primo: nelle condizioni di if e while devi lasciare spazi tra le parentesi quadre.
Questo non credo faccia quello che pensi.
esegue "comando" ed assegna ad "a" il suo output. Quindi stai cercando di eseguire "ext2", "ext3"... che non esistono.
Non ho idea di come fare esattamente quello che vuoi tu (accedere all'i-esimo argomento da linea di comando). Potresti invece ciclare sull'intera linea di comando, che dovrebbe essere $@. Devi però scartare il primo parametro, che è la directory. Qua dovresti trovare qualche spunto.
Tieni anche presente che devi fare una copia di $@ prima di chiamare la funzione "delfile", perché dentro di essa avrà il valore degli degli argomenti passati alla funzione, e non allo script (scopro ora quanto sia orribile il supporto alle funzioni di bash…).
estensione=$(ext\$i)
Questo non credo faccia quello che pensi.
a = $(comando)
esegue "comando" ed assegna ad "a" il suo output. Quindi stai cercando di eseguire "ext2", "ext3"... che non esistono.
Non ho idea di come fare esattamente quello che vuoi tu (accedere all'i-esimo argomento da linea di comando). Potresti invece ciclare sull'intera linea di comando, che dovrebbe essere $@. Devi però scartare il primo parametro, che è la directory. Qua dovresti trovare qualche spunto.
Tieni anche presente che devi fare una copia di $@ prima di chiamare la funzione "delfile", perché dentro di essa avrà il valore degli degli argomenti passati alla funzione, e non allo script (scopro ora quanto sia orribile il supporto alle funzioni di bash…).