PDA

Visualizza la versione completa : [bash] script cestino non funzionante


fraffalla1987
16-04-2013, 14:25
ciao a tutti spero possiate aiutarmi con questo script..devo risolvere l'esercizio per domani urgentemente e ammettendo la mia incapacità in materie informatiche vi dico che ho trovato la soluzione su internet ma quando provo a lanciarlo non funziona...mi sapete dire quali sono gli errori che non mi permettono di soddisfare la richiesta dell'esercizio?? grazie grazie fra

Eccolo:
Scrivere uno script che accetta come parametri una sequenza di nomi di file (ordinari o
directory) e li rimuove spostandoli nella cartella .cestino della propria home (invece di cancellarli fisicamente). Nel caso in cui la directory .cestino non esista, lo script dovrà crearla. Nel caso in cui i file da rimuovere abbiano dei nomi che corrispondono ad altri file già presenti in .cestino , lo script dovrà chiedere all’utente se desidera sovrascriverli. Si implementino inoltre le seguenti opzioni:
-l che permette di visualizzare il contenuto della directory .cestino
;
-e che svuota la directory .cestino
;
-r nomefile percorsoche ripristina il file nomefile spostandolo dalla directory .cestino a quella specificata da percorso. Nel caso in cui nella directory di destinazione esista già un
file con lo stesso nome, lo script dovrà chiedere all’utente se desidera sovrascriverlo.
Si gestiscano opportunamente gli errori e si provi lo script su alcuni esempi significativi.


#!/bin/bash
# controllo argomenti
if [ $# -lt 1 ] ; then
echo "Uso: cestina.sh file1 file2 ...."
echo " cestina.sh -l"
echo " cestina.sh -e"
echo " cestina.sh -r nomefile percorso"
exit 1
fi
# controlla l’esistenza del cestino. Se non c’è lo crea
cestino=$HOME/.cestino
if [ ! -e $cestino ] ; then
mkdir $cestino
if [ $? != 0 ] ; then
echo "ERRORE: impossible creare il cestino."
exit 1
fi
fi
# controlla il primo argomento e vedi se è un’opzione
case $1 in
"-l") # Elenca i file in .cestino
if [ $# -ne 1 ] ; then
echo "Uso: cestina.sh -l"
exit 1
fi
echo "CONTENUTO DEL CESTINO:"
ls $cestino
;;
"-e") # Svuota il cestino



if [ $# -ne 1 ] ; then
echo "Uso: cestina.sh -p"
exit 1
fi
rm -rf $cestino/
*
echo "CESTINO SVUOTATO."
;;
"-r") # recupera il file
if [ $# -ne 3 ] ; then
echo "Uso: cestina.sh -r nomefile percorso"
exit 1
fi
nomefile=$2
percorso=$3
if [ ! -e $cestino/$nomefile ] ; then
echo "ERRORE: il file da recuperare non è presente nel cestino."
exit 1
fi
if [ ! -d $percorso ] ; then
echo "ERRORE: il secondo argomento deve essere una directory."
exit 1
fi
if [ -e $percorso/$nomefile ] ; then
echo -n "Il file esiste già! Sovrascrivere? (s/n): "
read risp
if [ $risp != "s" -a $risp != "S" ] ; then
echo "recupero annullato."
exit 1
fi
fi
echo "recupero il file " $nomefile
mv -f $cestino/$nomefile $percorso
;;
*
) # nessun argomento, sposta i file nel cestino
for f in $
*
; do
echo "Cancellazione di " $f
if [ ! -e $f ] ; then
echo "ERRORE: il file " $f " non esiste."
elif [ -e $cestino/$(basename $f) ]
then
echo -n "Il file " $f "esiste già nel cestino! Sovrascrivere? (s/n): "
read risp
if [ $risp != "s" -a $risp != "S" ] ; then
echo "Rimozione di " $f " annullata."
exit 1
else
mv -f $f $cestino
fi
else
mv -f $f $cestino
fi
done
;;
esac

Alex'87
16-04-2013, 15:34
"Non funziona" non vuol dire nulla: errori di sintassi? non fa quello che ti aspetti?

ps: indenta il codice (e usa il tag CODE), altrimenti il codice è illeggibile e passa la voglia di guardarlo...

MItaly
16-04-2013, 17:27
Sottoscrivo, aggiungo che il linguaggio di riferimento va sempre indicato nel titolo (come "tag"), e ti invito a dare un'occhiata al regolamento (http://forum.html.it/forum/showthread.php?s=&threadid=973887), in particolare al punto sulla "pappa pronta". :fagiano:

fraffalla1987
17-04-2013, 15:57
scusatemi ma non avevo idea che ci fosse un regolamento con determinate regole da seguire x quanto riguarda la struttura di una discussione:D sono nuova dei forum e alle prime armi con il computer quindi abbiate un po di pazienza :stordita: cercherò di spiegarmi meglio

punticci
18-04-2013, 15:14
Che errori ti da? Io per l'esistenza della cartella avrei usato test nella if.. però non penso sia quello il problema.

Loading