![]() |
|
|
google unix.com
|
|||||||
| Foros | Registro | Reglas de los Foros | Enlaces | Álbumes | Preguntas más frecuentes | Lista de miembros | Calendario | Búsqueda | Puestos de hoy | Marcar Foros Como Leídos |
| Programación de scripts de shell y Plantear preguntas sobre KSH, CSH, SH, BASH, PERL, PHP, SED, AWK y otros scripts de shell y lenguajes de script de shell aquí. |
Más UNIX y Linux Foro Temas usted puede encontrar útiles
|
||||
| Hilo | Hilo para principiantes | Foro | Respuestas | Último mensaje |
| bucle while dentro de bucle while | panknil | Programación de scripts de shell y | 0 | 01-07-2008 12:49 PM |
| Bucle for | xramm | HP-UX | 3 | 10-10-2007 03:20 PM |
| Si bien Bucle | hemangjani | Programación de scripts de shell y | 2 | 11-02-2006 11:01 AM |
| bucle for | munnabhai1 | Programación de scripts de shell y | 3 | 04-06-2006 03:30 PM |
| cómo obtener la función similar en el bucle while o bucle for | trynew | Programación de scripts de shell y | 3 | 06-17-2002 12:09 PM |
![]() |
|
|
Linkback vínculo | Herramientas de hilo | Buscar en este Hilo | Tasa de Hilo | Modos de visualización |
|
|
|
||||
|
sh bucle Necesita ayuda
Hola,
Tengo el siguiente script que hace una copia de seguridad a través de un cpio NFS de montaje. El problema es que sólo parecen estar raíz. No estoy seguro de lo que estoy haciendo mal aquí, pero no está funcionando. Lo que sigue es la secuencia de comandos. He resaltado las áreas en las que creo que tengo un problema o al menos relevantes, creo. ![]() #! / bin / sh # # Establecer variables de configuración # NFSMOUNT \u003d "/ mnt /nfs' BACKUP_LOG \u003d '/ usr / local / backup_logs' EXCLUDE_FS \u003d "/ mnt /nfs' HARDWARE_LOG \u003d '/ var / adm / messages " exportación NFSMOUNT BACKUP_LOG EXCLUDE_FS HARDWARE_LOG # Obtener la fecha en el formato MMDDAA MDY \u003d `date +% m% d% y» if [! -d $ () BACKUP_LOG-o! -w $ (BACKUP_LOG)], y luego echo "$ () BACKUP_LOG no existe o no tiene permiso de escritura" salida 1 fi echo "# # # Copia de seguridad a partir de` date `" # LOG_START es el número de líneas en nuestro hardware de registro # Comenzó cuando la copia de seguridad. No estamos interesados en cualquier cosa # Que se han producido hasta ahora. LOG_START \u003d `wc-l <$ () HARDWARE_LOG» # Tira de la dirección y los espacios LOG_START \u003d `expr $ () LOG_START» BACKUPTYPE \u003d "cpio" # Obtener la lista de los sistemas de archivos de Unix para hacer copias de seguridad MOUNTEDSYSTEMS \u003d `df-F ufs | cut-d ''-f1 | sort» # Quitar los sistemas de archivos excluidos de la lista para FS en $ MOUNTEDSYSTEMS hacer case "$ () EXCLUDE_FS" en # Si su excluidos no hacer nada * "$ (FS) "*);; # Agregar a la lista de entrada *) Case "$ () sistemas de archivos" en # Lista está vacía por lo que esta es la primera entrada '') De ficheros \u003d "$ (FS)";; # Lista contiene las entradas a fin de añadir a la lista *) Los sistemas de ficheros \u003d "$ (de ficheros $ (FS))";; esac;; esac hecho cd / if [ "$ BACKUPTYPE" \u003d "vertedero"] y, a continuación, # Copia de seguridad de uso de vertedero para FS en sistemas de ficheros $ () hacer echo "dumping $ $ (FS)) (NFSMOUNT" | \ tee-a $ () BACKUP_LOG / bu.ufsdump. MDY $ () / usr / sbin / ufsdump 0fu $ NFSMOUNT) ($ (FS) 2> & 1 | \ # Sólo estamos interesados en las dos últimas líneas de la producción # para determinar si se trataba de un éxito de volcado tee-a $ () BACKUP_LOG / bu.ufsdump. MDY $ () | cola -3 # Conde de volcado de sistema de archivos FS_COUNT \u003d `expr $ (FS_COUNT) + 1» hecho algo más # De copias de seguridad usando cpio para FS en sistemas de ficheros $ () hacer echo "Escribir archivo cpio de $ (FS) $ (a) NFSMOUNT" | \ tee-a $ () BACKUP_LOG / bu.cpio. MDY $ (). errar \ >> $ () BACKUP_LOG / bu.cpio. MDY $ () # La salida de encontrar siempre será relativo a la raíz encontrar.) $ (FS-print-xdev | \ # Utilice sed a cambio ". /" a "/" para Solaris cpio no corteza sed -e 's / ^ \. \ / $ / \ / /' | \ cpio-oc-O $ (NFSMOUNT) / `hostname`. MDY $ () \ 2>> $ () BACKUP_LOG / bu.cpio. MDY $ (). Errar \ 1>> $ () BACKUP_LOG / bu.cpio. MDY $ () # Cpio contar archivo de sistema de archivos FS_COUNT \u003d `expr $ (FS_COUNT) + 1» hecho cat $ BACKUP_LOG () / bu.cpio. MDY $ (). errar fi # Mostrar información de archivos que se acaba de copia de seguridad echo "# # # Actualmente, los sistemas de archivos montados:" df-k de ficheros $ () echo "###" LOG_END \u003d `wc-l <$ () HARDWARE_LOG» # Franja principal y los espacios LOG_END \u003d `expr $ () LOG_END» if [ "$ (LOG_BEGIN)"-ne "$ () LOG_END"] y, a continuación, # Informe de errores en registro de copia de seguridad durante # Grep añadir líneas adicionales para eliminar los mensajes que aparecen normales en su # Sistema de registro de secuencia de comandos echo "# # # sistema de registros generados durante la copia de seguridad:" cat $ () HARDWARE_LOG | \ sed -e "1, $ (d) LOG_START" | \ grep-v "de conectar" | \ v grep "negó la conexión de" | \ nawk '(print substr ($ 0,1,78)); \ longitud> 78 (print "" substr ($ 0,79)) ' echo "###" fi # Quitar archivos de registro antiguos if [ "$ (BACKUPTYPE)" \u003d "cpio"] y, a continuación, cd $ () BACKUP_LOG encontrar. -mtime +14-exec rm-seguir () \; ls-l $ (BACKUP_LOG) / * eco fi echo "Copia de seguridad terminados en" `date` |
|
||||
|
¿Cuáles son los síntomas? Es un poco difícil de adivinar dónde va mal sólo mirar el código. Me di cuenta de un problema de menor importancia aquí: Código:
case " ${EXCLUDE_FS} " in
# If its excluded do nothing
*" ${FS} "*);;
Usted está EXCLUDE_FS requieren tener espacios en ambos lados para que esto coinciden, pero no parecen tener todos los espacios hasta que se están asignando EXCLUDE_FS. O bien ampliar el "caso" de código para manejar los partidos en principio, fin, y por sí sola, o añadir los espacios para la misión. (Este último es más fácil, pero más probabilidades de pasar desapercibido por alguien que rápidamente se actualiza la lista de exclusión posterior.) El caso de que usted es la actualización de los sistemas de ficheros parece innecesariamente complicada. Añadiendo un espacio al principio de la lista si es vacía parece inofensivo, a juzgar por lo que hacer con él más adelante en el código. Yo, EXCLUDE_FS se convertiría en una expresión regular, y filtrar la salida de df a través egrep, y deshacerse de toda esa burbuja de código, de todos modos. ¿Cuál es el punto de exportación de todos los que las variables? Usted no está invocando subcommands que los necesitan, ¿verdad? Parece que falta un guión delante de la opción aquí: Código:
grep v "refused connection from " | \ No puede ver lo que le pasa a la parte CPIO, lo siento. Indentación adecuada probablemente ayudar un poco aquí, también ... |
![]() |
| Marcadores |
| Herramientas de hilo | Buscar en este Hilo |
| Modos de visualización | Vota a este hilo |
|
|