2012-11-17 11 views
0

J'ai une université de cours pour terminer et je suis un peu coincé sur cette partie:Linux Shell Script Coincé

del - Ce script devrait déplacer le fichier appelé dans le répertoire poubelle d'une manière qui permettra au fichier être restauré à son emplacement d'origine plus tard si nécessaire.

J'ai fait une tentative, comme indiqué ci-dessous, mais il ne fonctionne pas:

#!/bin/bash 
echo "Do you want to delete this file?" 
echo "Y/N" 
read ans 
case "$ans" in 
    Y) echo "`readlink -f $1`" >>/TAM/store & mv $1 /~/dustbin ;; 
    N) echo "File not deleted" ;; 
esac 

Quand je le lance, j'obtiens ceci:

./Del: line 8: /TAM/store: No such file or directory 
MV: missign destination file operand after '/~/dustbin' 

aussi Comment utiliser la saisie de l'utilisateur d'entrer le nom de le fichier? ou pouvez-vous pas faire cela.

P.S. ~ est le répertoire racine, TAM est mon répertoire, store est le fichier et dustbin est le dustbin dans le répertoire root. Del est le nom du script

+0

Vous ne nous avez pas dit ce qui ne fonctionne pas. – bmargulies

+0

Mon mauvais Il l'édite – TAM

+2

Je dirais qu'il est très possible de faire une "meilleure" solution, mais une chose que vous vouliez probablement dire est "&&" pas '&'. En ce qui concerne votre deuxième question, s'il est possible de laisser l'utilisateur entrer un nom de fichier; un indice: Comment lisez-vous la réponse des utilisateurs? Peut-être que cela pourrait être utilisé pour lire un nom de fichier? ;) Troisièmement, '$ 1' contient le premier argument (le cas échéant) du programme. – Jite

Répondre

1

Puisque vous avez dit qu'il est un travail de cours, je ne vais pas vous donner une solution complète, mais assez simple (simplifié) commencer:

#!/bin/sh 

if [ $# -eq 0 ]; then 
    printf "You didn't give an argument, please input file name: \n" 
    filename=READ_FILE_NAME_HERE 
elif [$# -eq 1 ]; then 
    filename=$1 
else 
    printf "Error: You gave to many parameters!\n" 
    exit 1 
fi 

# Does the file exist (and is a regular file)? 
[ -f "$filename" ] || { 
    printf "Error: File doesn't exist or isn't a regular file.\n" 
    exit 2 
    } 

Do_you_really_want_to_delete_the_file? 
Do_the_remove_magic 

Cela devrait vous aider à démarrer sur la "soit prendre une entrée de paramètre, ou si aucun, autoriser l'utilisateur à entrer le nom de fichier" -problem. Si vous avez passé les vérifications, vous savez que le nom de fichier contient un nom de fichier valide, donc vous pouvez supprimer l'appel readlink (bien qu'il ne vous donne pas le chemin complet), mais vous pouvez utiliser printf "$filename" >>DEST, etc.

Il y a beaucoup de bonnes informations à lire dans le manuel pour bash. (Essayez: man bash)

+0

Merci, je vais travailler pour que ça marche et que je lise le manuel. – TAM

+0

J'ai changé ma réponse concernant 'readlink', bien que je n'ai jamais eu besoin de l'utiliser, il semble que je l'ai testé de manière incorrecte. J'ai édité ma réponse à propos de cette partie. Notez simplement que '$ #' est le nombre d'arguments du programme, comme dans './del arg1 arg2 arg3' définirait' $ # égal à 3', et '$ 1 est égal à arg1' etc. – Jite