The UNIX and Linux Forums  
Hej och välkommen från USA till UNIX och Linux Forum! Tack för ditt besök och gå med i vår globala gemenskapen.

Go Back   UNIX och Linux Forum > Upp Forum > Shell-programmering och Skript
.
google unix.com



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
Awk-skript i DOS och Linux fungerar på olika sätt: ( vidyak Windows & DOS: Frågor & Diskussioner 2 04-01-2009 12:07
"$ variabel" inte beter sig som en sträng i mitt manus yabhi_22 UNIX for Dummies Frågor & Svar 3 02-06-2009 01:20
Script beter sig annorlunda på två servrar mhssatya UNIX för avancerade & Expertanvändare 5 09-13-2006 03:28
Script beter sig annorlunda i Crontab .. newtoxinu Shell-programmering och Skript 4 10-01-2004 02:22
Script beter sig annorlunda i Crontab .. newtoxinu UNIX för avancerade & Expertanvändare 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 denna tråd Rate Thread Visningslägen
  #1 (permalänk)  
Old 04-22-2009
lavascript lavascript is offline
Registered User
  
 

Join Date: april 2009
Inlägg: 47
Thumbs down Varför är en rörlig beter sig annorlunda i ksh script.

Killar jag har konstiga beteende med kommandot utdata sparas i en variabel istället för en tmp fil.

1. Jag suger kommandot produktionen i en variabel

Exempel på kommando produktion

Kod:
# 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. Jag sedan skriva ut den variabel till skärmen för debug och som väntat
3. Jag sedan skriva ut den variabel till en awk uttalande i en IF-testet och det inte fungerar som den ska.
4. Om produktionen är fångade i en tempfile och samma awk uttalande används men med ingång från tmpfile så det fungerar.

Nedanstående kod visar ett sätt som inte fungerar och en som gör det. Kan någon kasta något ljus till varför?
Jag är naturligtvis att försöka använda variabler i stället för tmpfiles överallt.
Jag kan inte förstå det eftersom de tryckta redogörelse för debug visar produktionen som förväntat.

Kod:
#!/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
Använda provet produktionen ovan kommer att leda den första delen av matchen när det inte, men den andra delen fungerar och bara passerar genom om.

Vem som helst kasta något ljus på det? IFS är inställd som newline som standard.

Skål

Senast redigerad av lavascript; 04-22-2009 vid 10:23..
  #2 (permalänk)  
Old 04-22-2009
lavascript lavascript is offline
Registered User
  
 

Join Date: april 2009
Inlägg: 47
Red face

Konstigt nog bara inställningen IFS att ingenting verkar ha fast det.

Jag är inte helt säker på varför, men samlades det runt om i området separator.

Jag försökte göra detta: --

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

if [ ....blah

IFS=$oldIFS
. och märkte det fungerade korrekt men print output från awk saknades n och r's.

Genom trial-and-error Jag hittade inställningen
Kod:
IFS=""
gjort det arbetet.

Alla vet varför?

skål
Closed Thread

Komihåglista

Thread Tools Sök i denna tråd
Sök i denna tråd:

Avancerad sökning
Visningslägen Betygsätt denna tråd
Betygsätt denna tråd:

Utstationering Regler
Du får inte efter nya trådar
Du får inte efter svar
Du får inte skicka bilagor
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG] kod
HTML-koden är Av
Trackback är
Pingbacks är
Refbacks är




Alla tider är GMT -4. Klockan är nu 11:11.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Översättningar Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
UNIX och Linux Forum Innehållet upphovsrättsskyddat © 1993-2009. All Rights Reserved.Ad förvaltning RedTyger

Content Relevant webbadresser från vBSEO 3.2.0