![]() |
|
|
google unix.com
|
|||||||
| Forum | Registrera | Forum Regler | Länkar | Album | FAQ | Medlemslista | Kalender | Söka | Dagens inlägg | Markera forum som lästa |
| Shell-programmering och Skript Post frågor om ksh, CSH, SH, bash, PERL, PHP, sed, awk och andra skalskript och skal skriptspråk här. |
Mer UNIX och Linux Forum Ämnen Du kan hitta Helpful
|
||||
| Tråd | Thread Starter | Forum | Svar | Senaste Inlägg |
| medan slinga inne medan loop | panknil | Shell-programmering och Skript | 0 | 01-07-2008 12:49 |
| För loop | xramm | HP-UX | 3 | 10-10-2007 03:20 |
| Även Loop | hemangjani | Shell-programmering och Skript | 2 | 11-02-2006 11:01 |
| För loop | munnabhai1 | Shell-programmering och Skript | 3 | 04-06-2006 03:30 |
| hur man kan få liknande funktion i medan loop eller slinga | trynew | Shell-programmering och Skript | 3 | 06-17-2002 12:09 |
![]() |
|
|
LinkBack | Thread Tools | Sök i denna tråd | Rate Thread | Visningslägen |
|
|
|
||||
|
sh loop Behöver du hjälp
Hej,
Jag har följande skript som gör en säkerhetskopia via cpio till en NFS mount. Problemet är att jag bara verkar vara att bli root. Jag är inte säker på vad jag gör fel men det fungerar inte. Nedan följer hela skriptet. Jag har lyft fram områden där jag tror att jag har ett problem eller åtminstone är relevant, tror jag. ![]() #! / bin / sh # # Set konfiguration variabler # NFSMOUNT \u003d '/ mnt /nfs" BACKUP_LOG \u003d "/ usr / local / backup_logs" EXCLUDE_FS \u003d '/ mnt /nfs" HARDWARE_LOG \u003d '/ var / adm / messages " export NFSMOUNT BACKUP_LOG EXCLUDE_FS HARDWARE_LOG # Få dagen i MMDDÅÅ format YMD \u003d "datum +% m% d% Y" om [! -d $ (BACKUP_LOG)-o! -w $ (BACKUP_LOG)]; sedan echo "$ (BACKUP_LOG) finns inte eller kan inte skriva" exit 1 fi echo "# # # Backup börjar på" dagen "" # LOG_START är antalet linjer i vår hårdvara log # När säkerhetskopian började. Vi ber inte om något # Som inträffade före nu. LOG_START \u003d "wc-l <$ (HARDWARE_LOG)` # Strip ledande och blanksteg LOG_START \u003d `expr $ (LOG_START)` BACKUPTYPE \u003d "cpio" # Få listan av Unix filsystem för att säkerhetskopiera MOUNTEDSYSTEMS \u003d `df-F UFS | cut-d ''-f1 | sortera" # Ta bort uteslutas filsystem från listan för FS $ MOUNTEDSYSTEMS göra case "$ (EXCLUDE_FS)" i # Om det uteslutas göra ingenting * "$ (FS) "*);; # Lägg till inresa till listan *) Case "$ (filsystem)" i # Listan är tom så detta är den första posten '') Filsystem \u003d "$ (FS)"; # Listan innehåller poster så append till lista *) Filsystem \u003d "$ (filsystem) $ (FS)"; ESAC; ESAC gjord cd / Om [ "$ BACKUPTYPE" \u003d "dumpa"]; sedan # Backup använder dumpa för FS i $ (filsystem) göra echo "Dumping $ (FS) $ (NFSMOUNT)" | \ tee-a $ (BACKUP_LOG) / bu.ufsdump. $ (YMD) / usr / sbin / ufsdump 0fu $ (NFSMOUNT) $ (FS) 2> & 1 | \ # Vi endast med de två sista raderna i produktionen # för att avgöra om detta var ett framgångsrikt dumpa tee-a $ (BACKUP_LOG) / bu.ufsdump. $ (YMD) | tail -3 # Räkna dumpa av filsystemet FS_COUNT \u003d `expr $ (FS_COUNT) + 1" gjord annan # Säkerhetskopia med cpio för FS i $ (filsystem) göra echo "Skriva cpio arkiv med $ (FS) till $ (NFSMOUNT)" | \ tee-a $ (BACKUP_LOG) / bu.cpio. $ (YMD). fela \ >> $ (BACKUP_LOG) / bu.cpio. $ (YMD) # Resultatet hittar alltid kommer att vara i förhållande till roten hitta. $ (FS)-print-xdev | \ # Använd sed förändras ". /" tillbaka till "/" så Solaris cpio inte bark sed -e 's / ^ \. \ / $ / \ / /' | \ cpio-OC-O $ (NFSMOUNT) / "värdnamn." $ (YMD) \ 2>> $ (BACKUP_LOG) / bu.cpio. $ (YMD). Fela \ 1>> $ (BACKUP_LOG) / bu.cpio. $ (YMD) # Räkna cpio arkiv med filsystemet FS_COUNT \u003d `expr $ (FS_COUNT) + 1" gjord cat $ (BACKUP_LOG) / bu.cpio. $ (YMD). fela fi # Display filsystem som var bara backas upp echo "# # # För närvarande monterade filsystem:" df-k $ (filsystem) echo "###" LOG_END \u003d "wc-l <$ (HARDWARE_LOG)` # Band ledande och blanksteg LOG_END \u003d `expr $ (LOG_END)` Om [ "$ (LOG_BEGIN)"-ne "$ (LOG_END)"]; sedan # Rapportera fel i loggen under backup # Lägga till ytterligare grep linjer för att undanröja vanliga meddelanden visas i # System logga script echo "# # # System loggar som genereras under backup:" cat $ (HARDWARE_LOG) | \ sed -e "1, $ (LOG_START) d" | \ grep-v "koppla av" | \ grep v "vägrade anslutningen från" | \ nawk '(print substr ($ 0,1,78)); \ Längd> 78 (print "" substr ($ 0,79)) ' echo "###" fi # Ta bort gamla loggfiler Om [ "$ (BACKUPTYPE)" \u003d "cpio"]; sedan cd $ (BACKUP_LOG) hitta. -mtime 14-följ-exec rm () \; ls-lt $ (BACKUP_LOG) / * echo fi echo "Backup Färdiga på" "dag" |
|
||||
|
Vilka är symtoms? Det är lite svårt att gissa när du tänker fel genom att bara titta på koden. Jag lade märke till ett litet problem här: Kod:
case " ${EXCLUDE_FS} " in
# If its excluded do nothing
*" ${FS} "*);;
Du är som kräver EXCLUDE_FS ha utrymmen på båda sidor för att den skall stämma, men du verkar inte ha de utrymmen där uppe var du tilldela EXCLUDE_FS. Antingen expandera "fall" kod för att hantera matcher i början, slutet, och ensam, eller lägga till dessa utrymmen till uppdraget. (Den senare är lättare, men mer sannolikt att gå obemärkt förbi någon som snabbt uppdaterar utesluta lista senare.) Fallet där du uppdaterar filsystem verkar onödigt komplicerat. Lägga till ett mellanslag i början av listan om det är tomt synes harmlösa, att döma av vad du gör med den senare i koden. Me, jag skulle vända EXCLUDE_FS i ett vanligt uttryck, och filtrera utdata från df genom egrep och bli av med att hela fläcken av koden ändå. Vad är meningen att exportera alla dessa variabler? Du är inte åberopa subcommands som behöver dem, är du? Du verkar inte ett bindestreck framför alternativet här: Kod:
grep v "refused connection from " | \ Kan inte se vad som är fel med cpio sidan, ledsen. Proper indenteringen skulle förmodligen bidra lite här också ... |
![]() |
| Komihåglista |
| Thread Tools | Sök i denna tråd |
| Visningslägen | Betygsätt denna tråd |
|
|