![]() |
Bonjour et bienvenu par les États-Unis à la UNIX et Linux Forums! Merci de votre visite et vous joindre à notre communauté mondiale.
|
|
google unix.com
|
|||||||
| Forums | S'inscrire | Forum Rules | Liens | Albums | FAQ | Liste des membres | Calendrier | Recherche | Aujourd'hui, les postes | Marquer les forums comme lus |
| De programmation et de script Shell Posez vos questions à propos de KSH, CSH, SH, BASH, PERL, PHP, SED, awk et d'autres scripts shell et les langages de script shell ici. |
Plus d'UNIX et Linux Forum Sujets Vous trouverez peut-être utile
|
||||
| Fil | Thread Starter | Forum | Réponses | Last Post |
| fonction mail problème | jwholey | De programmation et de script Shell | 4 | 05-01-2008 12:21 PM |
| Script problème de répertoires récursifs Aide s'il vous plaît | robertmcol | De programmation et de script Shell | 2 | 04-27-2008 08:00 PM |
| Fonction problème et Coredump | ZINGARO | De programmation et de script Shell | 8 | 02-19-2008 06:37 PM |
| fonction récursive | bebop1111116 | High Level Programming | 1 | 10-30-2006 08:12 PM |
| PERL fonction problème | avadhani | De programmation et de script Shell | 2 | 06-15-2005 05:18 AM |
![]() |
|
|
LinkBack | Thread Tools | Recherche sur ce Thread | Rate Thread | Modes d'affichage |
|
|
|
||||
|
Problème avec la fonction récursive
Salut à tous,
J'ai déplacer tous les fichiers dans une arborescence de structure de répertoire d'un répertoire unique. Afin de savoir quel fichier est à partir de quel répertoire, je vais avoir à ajouter le nom du répertoire au nom du fichier. Pour cela j'ai écrit une fonction récursive qui est comme suit --------------------------------------------- datamover () ( cd $ 1 # OLD_DIR \u003d $ 2 for i in * faire if [-d $ i] puis $ I \u003d TMP_DIR datamover $ TMP_DIR echo $ i autre mv $ i .. / $ 1_ $ i if [-f $ 1 /] puis echo certains fichiers existent encore autre cd .. rmdir $ 1 fi fi fait ) -------------------------------------------------- -------------- Lorsque j'exécute toujours le même sur une structure de répertoire comme Dira -> DirB -> DirL -> filen -> DIRM -> fileO ---> Dirc -> DirP -> filer -> DirQ -> fichiers le programme est de donner le résultat comme suit Dira -> DirB -> DirL_fileN -> DirM_fileO ---> Dirc -> DirP -> filer -> DirQ -> fichiers et le débogage ouptut est la suivante -------------------------------------------------- ---- + Echo Dir Name is Dira Nom Dir est Dira + \u003d MAIN_DIR Dira + Datamover Dira + Cd Dira + '[' DirB-d ']' + TMP_DIR \u003d DirB + Datamover DirB + Cd DirB + '[' DirL-d ']' + TMP_DIR \u003d DirL + Datamover DirL + Cd DirL + '[' Filen-d ']' + Filen mv .. / DirL_fileN + '['-F DirL / ']' + Cd .. + Rmdir DirL + Echo filen filen + '[' DIRM-d ']' + \u003d TMP_DIR DIRM + Datamover DIRM + Cd DIRM + '[' FileO-d ']' + FileO mv .. / DirM_fileO + '['-F DIRM / ']' + Cd .. + Rmdir DIRM + Echo fileO fileO + Echo fileO fileO + '[' Dirc-d ']' + Dirc mv .. / DirA_DirC mv: ne peut stat `dirc ': Aucun fichier ou répertoire + '[' Dira-f / ']' + Cd .. + Rmdir Dira rmdir: «Dira ': Aucun fichier ou répertoire -------------------------------------------------- ------------ Quelqu'un peut-il me dire blanc est le problème avec le code et comment le corriger? i exiger la production de ce scénario sera le Dira -> DirB_DirL_fileN -> DirB_DirM_fileO -> DirC_DirP_fileR -> DirC_DirQ_fileS Merci à l'avance |
|
||||
|
Citation:
Le script original échoue à cause de la for i in * déclaration Le * est évalué au départ de la fonction et de ne pas anticiper sur les fichiers déplacés vers le répertoire à partir d'un sous-répertoire. |
|
||||
|
zazzybob la solution est une solution simple et élégante.
En réponse à la récursivité dans un shell Korn fonction, il ya deux points à considérer. Toutes les variables, y compris le répertoire de travail courant, ont une dimension mondiale à moins que spécifiquement définie avec la fonction qui fait leur local au sein de la fonction. Code:
typeset FILENAME=/etc/hosts
Function ()
{
FILENAME=/etc/resolv.conf
echo $FILENAME
}
echo $FILENAME
Function
echo $FILENAME
/ etc / hosts / etc / resolv.conf / etc / resolv.conf Cependant, Code:
typeset FILENAME=/etc/hosts
Function ()
{
typeset FILENAME
FILENAME=/etc/resolv.conf
echo $FILENAME
}
echo $FILENAME
Function
echo $FILENAME
/ etc / hosts / etc / resolv.conf / etc / hosts Une façon rapide et sale pour les variables locales à la fonction Y COMPRIS le répertoire de travail est d'exécuter la fonction dans sa propre coquille par la mise entre parenthèses au sein de la fonction entre parenthèses. La fonction obtenir sa propre copie de l'environnement en cas d'appel et de toute modification, y compris le répertoire, pour que l'environnement ne seront pas reflétées dans le script d'appel qui est de sa propre fonction. Code:
typeset FILENAME=/etc/hosts
Function ()
{ (
FILENAME=/resolv.conf
echo $FILENAME
) }
echo $FILENAME
Function
echo $FILENAME
/ etc / hosts / etc / resolv.conf / etc / hosts Dernière édition par hegemaro; au 02.03.2007 10:41 AM.. |
![]() |
| Bookmarks |
| Thread Tools | Recherche sur ce Thread |
| Modes d'affichage | Rate this thread |
|
|