The UNIX and Linux Forums  

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
Skriv Fel med uppsättning kommandot Shribigb Shell-programmering och Skript 0 03-06-2009 06:08
tar fel avfart fördröjd form vattenförande fel chayato Linux 1 02-06-2009 12:07
I ksh skalkommando - Print "ABC" ger fel sagarjani Shell-programmering och Skript 2 10-08-2008 05:32
Anpassad fel sida när hankatt autentisering misslyckas sebagra UNIX och Linux Applications 0 05-06-2008 06:10
på kommando misslyckas a329743 UNIX för avancerade & Expertanvändare 1 10-05-2006 11:08

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-23-2009
lavascript lavascript is offline
Registered User
  
 

Join Date: april 2009
Inlägg: 47
Hur skriva ut fel och exit om kommandot misslyckas?

Killar några tips om att skriva ut ett felmeddelande till stderr och uppsägning bör ett kommando misslyckas inom ett ksh script? Jag försöker null vissa utdatafiler.

Touch lämpar sig inte som jag behöver null dem.
print ""> är inte lämplig som jag behöver för att kontrollera elsehere för om de är 0bytes eller inte.

Jag har provat dessa nedan exempel och inget att fungera korrekt. Jag vill inte att få en kontroll efter varje kommando som: --


Kod:
if [[ $? -ne 0 ]];then
   print "error blah blah" >&2
   exit 2
fi

Nedan tester fungerar inte korrekt. Jag gissar att leka något.


Kod:
OUTFILE=/tmp/out

# Null outfiles. Security already checked

> ${OUTFILE} || print "ERROR: blah blah \n" >&2 ; exit 2   #doesnt work

> ${OUTFILE} || (print "ERROR: blah blah \n" >&2 ; exit 2 )  #doesn't work

> ${OUTFILE} || (print "ERROR: blah blah \n" >&2 && exit 2) #doesnt work

if [[ -n "$(> ${OUTFILE} 2>&1)" ]];then
     print "ERROR: blah blah \n" >&2
     exit 2
fi    # doesnt work

Alla idéer eller alternativ?
  #2 (permalänk)  
Old 04-23-2009
EagleFlyFree EagleFlyFree is offline
Registered User
  
 

Join Date: april 2009
Inlägg: 13
Särskilt om rapportering och spännande, det här är ett något mer komprimerat idiom:


Kod:
test $condition || { print "Crap blew up; exiting"; exit 2; }

Du kan också direkt test på grund av ditt kommando:


Kod:
command || { print "Crap blew up; exiting"; exit 2; }

Jag tycker om att läsa det högt för mig själv som "antingen du gör det eller dö!", Som om threathening skriptet.

Senast redigerad av EagleFlyFree; 04-23-2009 vid 03:17..
  #3 (permalänk)  
Old 04-23-2009
lavascript lavascript is offline
Registered User
  
 

Join Date: april 2009
Inlägg: 47
Tack dude thats arbetat som smort.

Verkar jag var nästan där, men inte använda den korrekta ()

Kan ni förklara skillnaden mellan () och () på kommandoraden grupp? Även i notied det, i slutet innan) är mycket viktigt annars nästa kommando fungerar inte.

t.ex.


Kod:
This works and exits if cant null but echos got to here if can.

> ${OUTFILE} || { print "ERROR: cannot null output file. Exiting\n" >&2; exit 2; }
> ${TMPFILE} || { print "ERROR: cannot null tmp file. Exiting\n" >&2; exit 2; }

echo "got to here"

This doesnt work and never gets to echo even if null is successful

> ${OUTFILE} || { print "ERROR: cannot null output file. Exiting\n" >&2; exit 2 }
> ${TMPFILE} || { print "ERROR: cannot null tmp file. Exiting\n" >&2; exit 2 }

echo "got to here"

  #4 (permalänk)  
Old 04-23-2009
EagleFlyFree EagleFlyFree is offline
Registered User
  
 

Join Date: april 2009
Inlägg: 13
() Utför uppgifter i en ny subshell, med separat stat. () Utför saker i det aktuella skalet.

Exempel:


Kod:
(aVariable="hello"); echo $aVariable

detta inte print "hej", eftersom det var som i ett nytt skal, vars förkastades då () uttryck upphört. Tänk på variabel omfattning i C; variabler leva och dö inne i block där de är deklarerade.


Kod:
{aVariable="hello"; }; echo $aVariable

detta skrivs ut "hej", eftersom det var som i samma skal som nästa uttalande.

Det är samma skillnad som:

Kod:
sh myScript.sh

och

Kod:
source myScript.sh



Dessutom, ja, du behöver ett semikolon för att avsluta den senast inom (); det är ju så tankskalets grammatik definieras.
Slag på hur du kan antingen göra detta:

Kod:
if $condition; then $statements; fi

eller den här, med hjälp newlines stället för semikolon för att separera syntax delar:

Kod:
if $condition
then
    $statements
fi

Enligt de bash människans sida, det är olika från () eftersom (och) är reserverade ord i stället för metatecken, vilket betyder att de inte automatiskt leda ordet raster. Förmodligen gäller samma sak i resten av skal.

Senast redigerad av EagleFlyFree; 04-23-2009 vid 03:14..
  #5 (permalänk)  
Old 04-24-2009
lavascript lavascript is offline
Registered User
  
 

Join Date: april 2009
Inlägg: 47
Dude thats verkligt stora och ett upplysande svar. Tack så mycket. Dess säkert ge mig en bättre förståelse för tanken snarare än bara saker tills de arbetar
  #6 (permalänk)  
Old 04-24-2009
EagleFlyFree EagleFlyFree is offline
Registered User
  
 

Join Date: april 2009
Inlägg: 13
Nämner inte det, jag älskar yapping om bash.
Dess manualsidan är lång och skrämmande, men bläddra igenom det då och då, du är skyldig att lära sig mycket godbitar varje gång.
De delar om historia och Readline är särskilt coolt, och de är smidiga och roliga att använda.
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:56.


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