The UNIX and Linux Forums  
Hei og Velkommen fra USA til UNIX og Linux Forums! Takk for besøket og Delta i vårt globale samfunn.

Go Back   UNIX og Linux Forums > Top Forums > Shell programmering og Skripting
.
google unix.com



Shell programmering og Skripting Post spørsmål om ksh, csh, SH, Bash, Perl, PHP, SED, awk og ANDRE shell scripts og Shell skriptespråk her.

Mer UNIX og Linux Forum Emner Du kan finne nyttig
Tråd Tråd startet Forum Svar Siste innlegg
Awk skript i DOS og Linux oppfører seg forskjellig: ( vidyak Windows og DOS: Issues & Diskusjoner 2 04-01-2009 12:07
"$ variabelen" ikke oppfører seg som en streng i mitt script yabhi_22 UNIX for Dummies Spørsmål og svar 3 02-06-2009 01:20
Script oppfører seg forskjellig på to servere mhssatya UNIX for Advanced & ekspertbrukere 5 09-13-2006 03:28
Script oppfører seg forskjellig i Crontab .. newtoxinu Shell programmering og Skripting 4 10-01-2004 02:22
Script oppfører seg forskjellig i Crontab .. newtoxinu UNIX for Advanced & ekspertbrukere 1 09-30-2004 05:00

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 Søk i denne tråden Rate Thread Visningsmoduser
  #1 (permalink)  
Old 04-22-2009
lavascript lavascript is offline
Registrert bruker
  
 

Bli Dato: april 2009
Innlegg: 47
Thumbs down Hvorfor er en variabel oppfører seg forskjellig i ksh skriptet.

Gutter har jeg merkelig atferd med kommandoen utdataene lagres i en variabel i stedet for en tmp fil.

1. Jeg suger kommandoen utgang til en variabel

Eksempelkode kommandoen output

Code:
# cleanstats

DRIVE INFO:
----------

Drv    Type      Mount Time  Frequency   Last Cleaned         Comment
***    ****      **********  *********   ****************     *******
  0    hcart3*   51.9        0                N/A
  1    hcart3*   55.9        0                N/A
  2    dlt*      0.8         0                N/A
  3    dlt*      0.0         0                N/A
  4    dlt*      0.2         0                N/A
  5    dlt*      0.0         0                N/A

MEDIA INFO:
----------

media   media  robot  robot  robot  side/  optical  # mounts/      last
 ID     type   type     #    slot   face   partner  cleanings    mount time
-------------------------------------------------------------------------------
CLN206  DLT_CL NONE     -      -     -       -           0     12/26/2001 08:22
CLN207  DLT_CL NONE     -      -     -       -           0     03/10/2002 10:00
CLN205  DLT_CL NONE     -      -     -       -           0     08/18/2002 06:40
CLN703  DLT_CL NONE     -      -     -       -           0     03/29/2003 05:11
CLN701  DLT_CL NONE     -      -     -       -          20     00/00/0000 00:00
CLN635  DLT_CL NONE     -      -     -       -           0     11/21/2003 04:32
CLN219  DLT_CL NONE     -      -     -       -           0     07/13/2004 06:25
CLN636  DLT_CL NONE     -      -     -       -          14     01/22/2006 08:15
CLN211  DLT_CL TLD      1     21     -       -          12     10/31/2008 22:44
CLN209  DLT_CL NONE     -      -     -       -           0     12/13/2006 22:13
CLN210  DLT_CL NONE     -      -     -       -           0     10/19/2008 06:31
2. Jeg deretter skrive variabelen til skjermen for å feilsøke og som forventet
3. Jeg deretter skrive variabelen til en awk erklæring i en hvis testen og ikke fungerer som den skal.
4. Hvis utdataene fanget i en tempfile og samme awk statement brukes, men tar innspill fra tmpfile så det gjør arbeidet.

Nedenstående koden viser en måte som ikke fungerer, og en som gjør. Kan noen kaster noe lys på hvorfor?
Jeg er åpenbart prøver å bruke variabler i stedet for tmpfiles overalt.
Jeg kan ikke forstå det, fordi utskriften statement for debug viser utgang som forventet.

Code:
#!/bin/ksh

....script contents, variable assignment blah blah....

# Suck clean stats to variable
CSTAT=$(cleanstats)

# Or put in tmpfile
cleanstats > ${TMPFILE}

print "CSTAT contains [${CSTAT}]"  #DBG

# Check tape exists in library with free cleanings
# If tape is in unit but with no cleanings OR
# If tape is NOT in unit (TLD), the string returned is empty thus matching -z test

# (section 1)
if [[ -z "$( print ${CSTAT} | nawk '$3 == "TLD" && $8 != "0" {print}' )" ]];then
      .... do stuff ....
fi

# Above doesnt work, but below does

# (section 2)
#if [[ -z "$( nawk '$3 == "TLD" && $8 != "0" {print}' < ${TMPFILE} )" ]];then
#      .... do stuff ...
#fi
Bruke sample output ovenfor vil forårsake den første delen til kamp når den ikke skal, men den andre delen fungerer og bare går av hvis.

Noen kaster noe lys på den? IFS er angitt som newline som standard.

Skål

Sist endret av lavascript; 04-22-2009 på 10:23..
  #2 (permalink)  
Old 04-22-2009
lavascript lavascript is offline
Registrert bruker
  
 

Bli Dato: april 2009
Innlegg: 47
Red face

Oddly nok bare å sette IFS til ingenting synes å ha løst det.

Jeg er ikke helt sikker på hvorfor, men samlet ville det rundt feltet separator.

Jeg prøvde å gjøre dette: --

Code:
oldIFS=$IFS
IFS="\n\r"

if [ ....blah

IFS=$oldIFS
. og la merke til det fungerte riktig men utskriften output fra awk mangler n og r's.

Gjennom prøving og feiling fant jeg innstillingen
Code:
IFS=""
gjorde det arbeidet.

Alle som vet hvorfor?

skål
Closed Thread

Hugseliste

Thread Tools Søk i denne tråden
Søk i denne tråden:

Avansert søk
Visningsmoduser Ranger denne tråden
Ranger denne tråden:

Innleggsaktivitet Regler
Du kanskje ikke poste nye tråder
Du kanskje ikke poste svar
Du kanskje ikke post vedlegg
Du kanskje ikke redigere innleggene dine

BB-kode er
Smilefjes er
[IMG] koden
HTML-koden Av
Pingbacks er
Refbacks er




Alle klokkeslett er GMT -4. Nå er klokken 12:15.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Language Translations Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX og Linux Forums Content Copyright © 1993-2009. All Rights Reserved.Ad Management by RedTyger

Content Relevant nettadresser av vBSEO 3.2.0