![]() |
|
|
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 |
| tandis que l'intérieur tandis que la boucle la boucle | panknil | De programmation et de script Shell | 0 | 01-07-2008 12:49 PM |
| Pour la boucle | xramm | HP-UX | 3 | 10-10-2007 03:20 PM |
| Si Loop | hemangjani | De programmation et de script Shell | 2 | 11-02-2006 11:01 AM |
| boucle | munnabhai1 | De programmation et de script Shell | 3 | 04-06-2006 03:30 PM |
| la façon d'obtenir la même fonction en tout ou en boucle la boucle | trynew | De programmation et de script Shell | 3 | 06-17-2002 12:09 PM |
![]() |
|
|
LinkBack | Thread Tools | Recherche sur ce Thread | Rate Thread | Modes d'affichage |
|
|
|
||||
|
sh boucle Besoin d'aide
Salut,
J'ai le script suivant qui fait un backup via cpio à une NFS mount. Le problème est que je ne me semblent avoir root. Je ne suis pas sûr de ce que je fais mal, mais il ne fonctionne pas. Voici le script entier. J'ai mis en évidence les domaines où je pense avoir un problème ou au moins pertinente, je pense. ![]() #! / bin / sh # # Set variables de configuration # NFSMOUNT \u003d '/ mnt /nfs' BACKUP_LOG \u003d '/ usr / local / backup_logs' EXCLUDE_FS \u003d '/ mnt /nfs' HARDWARE_LOG \u003d '/ var / adm / messages' l'exportation NFSMOUNT BACKUP_LOG EXCLUDE_FS HARDWARE_LOG # Récupérer date en format MMJJAA MDY \u003d `date +% m% d% y` if [! -d $ () BACKUP_LOG-o! -w $ (BACKUP_LOG)], puis echo "$ () BACKUP_LOG n'existe pas ou n'est pas accessible en écriture" exit 1 fi echo "# # # Backup à partir de` date `" # LOG_START est le nombre de lignes dans notre journal de matériel # Lors de la sauvegarde commence. Nous ne sommes pas concernés par ce # Qui ont eu lieu avant maintenant. LOG_START \u003d `wc-l <$ ()` HARDWARE_LOG # Strip leader et les espaces LOG_START \u003d `expr $ ()` LOG_START BACKUPTYPE \u003d "cpio" # Obtenir la liste des systèmes de fichiers unix pour sauvegarder MOUNTEDSYSTEMS \u003d `df-F ufs | cut-d ''-f1 | sort» # Suppression des systèmes de fichiers exclus de la liste FS en $ MOUNTEDSYSTEMS faire case "$ () EXCLUDE_FS" dans # Si ses exclus ne rien faire * "$ (FS) "*);; # Ajouter une entrée à la liste *) Case "$ () FileSystems" dans # Liste est vide si ce n'est la première entrée '') FileSystems \u003d "$ (FS)";; # Liste contient des entrées afin d'ajouter à la liste *) FileSystems \u003d "$ (FileSystems) $ (FS)";; esac;; esac fait cd / if [ "$ BACKUPTYPE" \u003d "dump"], puis # Backup utilisant dump pour les FS dans $ () FileSystems faire echo "Dumping $ (FS) $ () NFSMOUNT" | \ tee-a $ BACKUP_LOG () / bu.ufsdump. MDY $ () / usr / sbin / ufsdump 0fu $ NFSMOUNT) ($ (FS) 2> & 1 | \ # Nous ne concerne que les deux dernières lignes de production # pour déterminer si cela a été un succès dump tee-a $ BACKUP_LOG () / bu.ufsdump. MDY $ () | tail -3 # Count dump du système de fichier FS_COUNT \u003d `expr $ FS_COUNT) (+ 1» fait autre # Backup utilisant cpio pour les FS dans $ () FileSystems faire echo "Writing cpio archive de $ (FS) pour $ () NFSMOUNT" | \ tee-a $ BACKUP_LOG () / bu.cpio. MDY $ (). err \ >> $ (BACKUP_LOG) / bu.cpio. MDY $ () # La sortie de trouver toujours être relatif à la racine trouver. $ (FS)-print-xdev | \ # Utilisation sed pour le changement ". /" à "/" pour Solaris cpio ne écorce sed -e 's / ^ \. \ / $ / \ / /' | \ cpio-oc-O $ (NFSMOUNT) / `hostname`. MDY $ () \ 2>> $ (BACKUP_LOG) / bu.cpio. MDY $ (). Err \ 1>> $ (BACKUP_LOG) / bu.cpio. MDY $ () # Compter cpio archive du système de fichier FS_COUNT \u003d `expr $ FS_COUNT) (+ 1» fait cat $ BACKUP_LOG () / bu.cpio. MDY $ (). err fi # Affichage des informations de fichiers qui vient sauvegardés echo "# # # Documents systèmes de fichiers montés: df-k $ () FileSystems echo "###" LOG_END \u003d `wc-l <$ ()` HARDWARE_LOG # Strip principal et les espaces LOG_END \u003d `expr $ ()` LOG_END if [ "$ (LOG_BEGIN)"-ne "$ () LOG_END"], puis # Rapport de log d'erreurs pendant la sauvegarde # Grep ajouter des lignes à supprimer normal dans vos messages # Script système de journalisation echo "# # # Système de logs générés pendant la sauvegarde:" cat $ HARDWARE_LOG () | \ sed -e "1, $ (d) LOG_START" | \ grep-v "se connecter" | \ v grep "a refusé de connexion" | \ nawk '(print substr ($ 0,1,78)); \ Longueur> 78 (print "" substr ($ 0,79)) ' echo "###" fi # Supprimer les anciens fichiers de log if [ "$ (BACKUPTYPE)" \u003d "cpio"], puis cd $ () BACKUP_LOG rechercher. -mtime +14-exec rm-suivre () \; ls-lt $ BACKUP_LOG () / * echo fi echo "Backup Terminé à" `date` |
|
||||
|
Quels sont les symptômes? C'est un peu difficile de deviner où l'on va mal juste en regardant le code. J'ai remarqué un petit problème ici: Code:
case " ${EXCLUDE_FS} " in
# If its excluded do nothing
*" ${FS} "*);;
Vous êtes exigeant EXCLUDE_FS d'avoir des espaces des deux côtés pour ce match, mais vous ne semblent pas disposer de ces espaces, il y avait vous affectez EXCLUDE_FS. Soit élargir le "cas" pour gérer matches au début, fin, et lui seul, ou d'ajouter des espaces à la cession. (Ce dernier est plus facile, mais plus de chances de passer inaperçue par quelqu'un qui a rapidement mises à jour de la liste d'exclusion plus tard.) Le cas où vous mettez à jour FileSystems semble inutilement compliqué. Ajout d'un espace au début de la liste si elle est vide semble inoffensif, à en juger par ce que vous en faites plus tard dans le code. Moi, je voudrais tourner EXCLUDE_FS dans une expression régulière, et de filtrer la sortie de df par egrep, et se débarrasser de toute cette blob de code, de toute façon. Quel est le point de l'exportation de toutes ces variables? Vous n'êtes pas invoquer subcommands qui en ont besoin, et vous? Vous semblez à l'absence d'un tiret devant le choix ici: Code:
grep v "refused connection from " | \ Vous ne pouvez pas voir ce qui ne va pas avec la partie CPIO, désolé. Proper indentation probablement aider un peu, ici aussi ... |
![]() |
| Bookmarks |
| Thread Tools | Recherche sur ce Thread |
| Modes d'affichage | Rate this thread |
|
|