Scripting shell...

fk16
Ragazzi ho un problema col seguente scripting di shell.
###################################################################################
#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 sotto­directory 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
claudio862
Punto primo: nelle condizioni di if e while devi lasciare spazi tra le parentesi quadre.

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…).

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.