![]() |
Ciao e benvenuto da parte degli Stati Uniti al UNIX e Linux Forum! Grazie per la visita ed unirsi alla nostra Comunità Globale.
|
|
google unix.com
|
|||||||
| Forum | Registrati | Regole Forum | Collegamenti | Album | FAQ | Members List | Calendario | Ricerca | Today's Posts | Mark Forums Read |
| Shell scripting e di programmazione Pubblica domande su KSH, CSH, SH, Bash, Perl, PHP, sed, awk e da altri script di shell e linguaggi di scripting shell qui. |
Più di UNIX e Linux Forum Argomenti potreste trovare utili
|
||||
| Filo | Thread Starter | Forum | Risposte | Ultimo Post |
| ciclo while all'interno ciclo while | panknil | Shell scripting e di programmazione | 0 | 01-07-2008 12:49 PM |
| Per loop | xramm | HP-UX | 3 | 10-10-2007 02:20 PM |
| Mentre Loop | hemangjani | Shell scripting e di programmazione | 2 | 11-02-2006 11:01 AM |
| per il ciclo | munnabhai1 | Shell scripting e di programmazione | 3 | 04-06-2006 02:30 PM |
| come ottenere la funzione analoga a ciclo while loop o per | trynew | Shell scripting e di programmazione | 3 | 06-17-2002 11:09 AM |
![]() |
|
|
LinkBack | Thread Tools | Cerca in questo Thread | Rate Thread | Modalità di visualizzazione |
|
|
|
||||
|
sh loop Serve un po 'di aiuto
Salve,
Ho il seguente script che esegue un backup tramite cpio ad un NFS montare. Il problema è che mi sembra di essere solo ottenere root. Non sono sicuro di quello che sto facendo di sbagliato, ma qui non è funzionante. In seguito è l'intero script. Ho evidenziato i settori in cui credo di avere un problema o almeno rilevante, credo. ![]() #! / bin / sh # Impostare le variabili di configurazione # # NFSMOUNT \u003d '/ mnt /nfs' BACKUP_LOG \u003d '/ usr / local / backup_logs' EXCLUDE_FS \u003d '/ mnt /nfs' HARDWARE_LOG \u003d '/ var / adm / messages' esportazione NFSMOUNT BACKUP_LOG EXCLUDE_FS HARDWARE_LOG # ArrivareProspettiPartner data nel formato GGMMAA MDY \u003d `date +% m% d% Y` if [! -d $ () BACKUP_LOG-o! -w $ () BACKUP_LOG], quindi echo "$ () BACKUP_LOG non esiste o non è scrivibile" exit 1 fi echo "# # # backup a partire da` date `" # LOG_START è il numero di linee nel nostro hardware Accedi # Quando il backup è iniziata. Noi non siamo interessati a qualcosa # Che si è verificato prima d'ora. LOG_START \u003d `wc-l <HARDWARE_LOG $ ()` # Striscia di leader e di spazi LOG_START \u003d `expr $ () LOG_START» BACKUPTYPE \u003d "cpio" # Ottenere l'elenco dei file system UNIX per eseguire il backup MOUNTEDSYSTEMS \u003d `df-F ufs | cut-d ''-f1 | sort` # Togliere esclusi dalla lista dei file system per FS in $ MOUNTEDSYSTEMS fare case "$ () EXCLUDE_FS" in # Se la sua esclusione non fare nulla * "$ (FS) "*);; # Entrata Aggiungi alla lista *) Case "$ () filesystem" in # List è vuoto quindi questa è la prima voce '') Filesystem \u003d "$ (FS)"; # Elenco contiene voci così aggiungere alla lista *) Filesystem \u003d "file system $ () $ (FS)"; esac; esac fatto cd / if [ "$ BACKUPTYPE" \u003d "dump"], quindi # Backup utilizzando discarica per le FS al filesystem $ () fare echo "dumping $ (FS) $ () NFSMOUNT" | \ tee-a $ () BACKUP_LOG / bu.ufsdump. MDY $ () / usr / sbin / ufsdump 0fu $ NFSMOUNT) ($ (FS) 2> & 1 | \ # Siamo interessati solo alle ultime due linee di produzione # per determinare se questo è stato un successo discarica tee-a $ () BACKUP_LOG / bu.ufsdump. MDY $ () | coda -3 # Conte discarica di file system FS_COUNT \u003d `expr $ (FS_COUNT) + 1` fatto altro # Backup utilizzando cpio per le FS al filesystem $ () fare echo "Scrittura cpio archivio di $ (FS) a $ () NFSMOUNT" | \ tee-a $ () BACKUP_LOG / bu.cpio. MDY $ (). err \ >> $ () BACKUP_LOG / bu.cpio. MDY $ () # L'output di trovare sempre essere relativi a root trovare. $ (FS)-print-xdev | \ # Usa sed per cambiare ". /" torna a "/" così Solaris cpio non corteccia sed -e 's / ^ \. \ / $ / \ / /' | \ cpio-oc-O $ () NFSMOUNT / `hostname`. MDY $ () \ 2>> $ () BACKUP_LOG / bu.cpio. MDY $ (). Err \ 1>> $ () BACKUP_LOG / bu.cpio. MDY $ () # Count cpio archivio di file system FS_COUNT \u003d `expr $ (FS_COUNT) + 1` fatto cat $ () BACKUP_LOG / bu.cpio. MDY $ (). err fi # Mostra le informazioni del filesystem che è stato appena eseguito il backup echo "# # # Attualmente i file system montati:" df-k $ () filesystem echo "###" LOG_END \u003d `wc-l <HARDWARE_LOG $ ()` # Striscia di leader e di spazi LOG_END \u003d `expr $ () LOG_END» if [ "$ () LOG_BEGIN"-ne "$ (LOG_END)"]; poi # Relazione errori durante il backup di log # Grep aggiungere ulteriori linee di rimuovere i messaggi che appaiono normali nella vostra # Script di sistema di registrazione echo "# # # Sistema log generato durante il backup:" cat HARDWARE_LOG $ () | \ sed -e "1, $ () LOG_START d" | \ grep-v "da collegare" | \ v grep "Connessione rifiutata da" | \ nawk '(print substr ($ 0,1,78)); \ lunghezza> 78 (print "" substr ($ 0,79)) ' echo "###" fi # Rimuovete i vecchi file di log if [ "$ (BACKUPTYPE)" \u003d "cpio"], quindi cd $ () BACKUP_LOG trovare. -mtime +14-follow-exec rm () \; $ ls-lt BACKUP_LOG () / * echo fi echo "Finito di backup a" `date` |
|
||||
|
Quali sono le symtoms? E 'un po' difficile da indovinare dove si sta andando storto solo guardando il codice.
Ho notato un piccolo problema qui: Codice:
case " ${EXCLUDE_FS} " in
# If its excluded do nothing
*" ${FS} "*);;
Il caso in cui si sta aggiornando i filesystem sembra inutilmente complicato. Aggiungere uno spazio all'inizio della lista, se è vuota sembra innocuo, a giudicare da ciò che si fa in un secondo momento con il codice. Me, vorrei girare EXCLUDE_FS in una espressione regolare, e filtrare l'output di df attraverso egrep, e liberarsi di tutto il blob di codice, comunque. Qual è il punto di esportare tutte queste variabili? Non sei invocando subcommands che ne hanno bisogno, sei tu? Lei sembra un po 'la mancanza di fronte alla facoltà di qui: Codice:
grep v "refused connection from " | \ La corretta indentazione probabilmente aiutare un po 'anche qui ... |
![]() |
| Segnalibri |
| Thread Tools | Cerca in questo Thread |
| Modalità di visualizzazione | Vota questo thread |
|
|