The UNIX and Linux Forums  
Ciao e benvenuto da parte degli Stati Uniti al UNIX e Linux Forum! Grazie per la visita ed unirsi alla nostra Comunità Globale.

Go Back   UNIX e Linux Forum > Inizio Forum > Shell scripting e di programmazione
.
google unix.com



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
Comunicati di sviluppo: Linux Mint 4.0 Beta "Fluxbox", 4.0 Alpha "Debian" iBot UNIX e Linux RSS News 0 01-04-2008 03:00 PM
Spiegare la linea "mn_code \u003d` env | grep ".. mn" | awk-F "\u003d" '(print $ 2)' `" Lokesha UNIX for Dummies Domande & Risposte 4 12-20-2007 01:52 AM
N. utpmx ingresso: è necessario eseguire la voce "login" dal livello più basso "guscio" peterpan UNIX for Dummies Domande & Risposte 0 01-18-2006 04:15 AM
Trova-name "*. txt" in Korn Shell Script jwperry Shell scripting e di programmazione 3 07-19-2002 01:51 PM
Korn shell di "selezionare" comando mpegler Shell scripting e di programmazione 2 06-23-2002 10:41 PM

Closed Thread
English Japanese Spanish French German Portuguese Italian Dutch Swedish Russian Norwegian Hungarian Hebrew Danish Bulgarian Greek Powered by Powered by Google
 
LinkBack Thread Tools Cerca in questo Thread Rate Thread Modalità di visualizzazione
  #1 (permalink)  
Old 09-15-2004
Muzica muzica is offline
Utente Registrato
  
 

Iscriviti Data: Sep 2004
Ubicazione: NYS
Interventi: 2
Korn shell "loop e array"

Salve,

Sto cercando di scrivere uno script che verrà eseguito il ciclo fino a quando una determinata azione è stata eseguita. Ho due file vorrei confronta.

Ad esempio:
file1 è un elenco di ID utente (circa 900) dalla società e-mail del server.
file2 è un elenco di ID utente (circa 50 o così) da / etc / passwd.

Ho file1 in un array, vorrei avere file2 in un ciclo.
Quando l'id partite sarà reindirizzato l'output a / dev / null,
ma quando i due ids non corrispondono, ho bisogno di reindirizzato l'output in file3. Questo è quindi possibile eliminare l'utente che si sono trasferiti su.

Questa è stata la mia 1a prova.

#! / usr / bin / ksh
Un set-array file1
for i in $ (array [@])
fare
echo $ i "\u003d\u003d\u003d\u003d vs file2 \u003d\u003d\u003d\u003d"
$ i diff file2
fatto> file3

------------------------------------------

e la mia 2a prova.

#! / usr / bin / ksh
egrep-se file2 file1> tmp_name
egrep-ivf tmp_name file2> file3
rm tmp_name

-------------------------------------------

e poi:


#! / usr / bin / ksh
mentre leggere il nome utente
fare
mentre leggere file2
fare
if [ '$ file1' \u003d '$ file2']; poi

altro

se
fatto <file2
fatto <file1
  #2 (permalink)  
Old 09-15-2004
bhargav's Avatar
bhargav bhargav is offline Forum Advisor  
Utente Registrato
  
 

Iscriviti Data: Sep 2004
Posizione: Stati Uniti d'America
Interventi: 511
u possibile utilizzare 'comm' per rendere semplice.


comm xy

dove X e Y sono i file che hanno l'elenco dei nomi / userids.
  #3 (permalink)  
Old 09-16-2004
Perderabo's Avatar
Perderabo Perderabo is offline Forum Staff  
Unix Daemon
  
 

Join Date: Aug 2001
Ubicazione: Ashburn, Virginia
Messaggi: 9.123
Nel caso in cui si desidera ottenere il ksh script in esecuzione, I'll commento su questo punto. Nel primo tentativo si spostano verso una soluzione in cui è ripetutamente a scansione di un file. Non farlo. Che si desidera leggere una volta ogni file. Credo che qualcosa come questo lavoro:
Codice:
i=0
exec < file1
while read array[i] ; do
      ((i=i+1))
done
exec <file2
while read entry ; do
      i=0
      found=0
      while ((i<${#array[@]})) ; do
            if [[ $entry = ${array[i]} ]] ; then
                 found=1
                 break
                 ((i=i+1))
            fi
      done
      if ((found)) ; then
            echo $entry is in file1
      else
            echo $entry is not in file1
      fi
done
Potrebbe uscire con qualcosa di simile:
Un set-array $ (cat file1)
ma l'insieme risultante deve essere inferiore alla lunghezza della linea max. Si potrebbe lavorare in un primo tempo, poi non più tardi. Il circuito sembra un po 'più sicuro. E 'un gatto incendi processo. Così il ciclo sarà un po 'troppo veloce.
  #4 (permalink)  
Old 09-17-2004
Muzica muzica is offline
Utente Registrato
  
 

Iscriviti Data: Sep 2004
Ubicazione: NYS
Interventi: 2
fresco, vi ringrazio entrambi.
  #5 (permalink)  
Old 09-23-2004
douknownam douknownam is offline
Utente Registrato
  
 

Iscriviti Data: maggio 2004
Posti: 35
Question

Perderabo,

Può spiegare il codice riga per riga? Credo di pesca per lo stesso tipo di soluzione, ma un sacco di confusione, è per me.
  #6 (permalink)  
Old 09-23-2004
Perderabo's Avatar
Perderabo Perderabo is offline Forum Staff  
Unix Daemon
  
 

Join Date: Aug 2001
Ubicazione: Ashburn, Virginia
Messaggi: 9.123
I'm not going to spiegare ogni riga. La maggior parte di esso è molto semplice. Che cosa è che non capisci? L'array? Sapete cosa è un array?

Una cosa: $ (# array [@]) è il numero di elementi dell'array.
  #7 (permalink)  
Old 09-23-2004
douknownam douknownam is offline
Utente Registrato
  
 

Iscriviti Data: maggio 2004
Posti: 35
Lightbulb

I guess I don't know what it is. il mio pensiero di un array è stato un modo per utilizzare più valori per un nome di variabile. bene, ho voluto utilizzare il codice di lettura 2 file (liste) e utilizzando le variabili in una condizione base per la stampa di un messaggio. (non andare oltre, a causa di cross-posting).

ok, quindi in questa parte:

Codice:
i=0
exec < file1
while read array[i] ; do
      ((i=i+1))

done
stai leggendo il file in e loop.

La mia confusione è con questa parte:
Codice:
exec <file2
while read entry ; do
      i=0
      found=0
      while ((i<${#array[@]})) ; do
            if [[ $entry = ${array[i]} ]] ; then
                 found=1
                 break
                 ((i=i+1))
            fi
      done
      if ((found)) ; then
            echo $entry is in file1
      else
            echo $entry is not in file1
      fi
done
Presumo che la trovato \u003d 0 è l'impostazione del conteggio a zero? Questa linea è la più confusa di me: while ((i <$ (# array [@]})); fare

Sta dicendo fare .. mentre "i" è inferiore al valore di array [@]?
Grazie per ogni ingresso.
Closed Thread

Segnalibri

Thread Tools Cerca in questo Thread
Cerca in questo Thread:

Ricerca Avanzata
Modalità di visualizzazione Vota questo thread
Vota questo thread:

Distacco regolamento
Tu non può post nuovo thread
Tu non può inviare una risposta
Tu non può postare allegati
Tu non può modificare i tuoi post

BB codice è Su
Smilies sono Su
[IMG] codice Su
Codice HTML è Chiuso
Trackbacks sono Su
Pingbacks sono Su
Refbacks sono Su




Tutti gli orari sono GMT -4. La data di oggi è 06:43 PM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Traduzioni Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX e Linux Forum Content Copyright © 1993-2009. Tutti i diritti Reserved.Ad di gestione da RedTyger

Contenuti pertinenti URL da vBSEO 3.2.0