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
Asterisk på IPCop Asterisk 1.4.20 för IPCop 1.4.18 (Standard filial) iBot Programversionerna - RSS News 0 05-21-2008 08:40
Asterisk på IPCop Asterisk 1.4.19.2 för IPCop 1.4.18 (Standard filial) iBot Programversionerna - RSS News 0 05-14-2008 07:20
Asterisk på IPCop IPCop 1.4.18 med Asterisk 1.4.19.1 (Asterisk IPCop ISO filial) iBot Programversionerna - RSS News 0 04-26-2008 04:10
Asterisk på IPCop Asterisk 1.4.19.1 för IPCop 1.4.18 (Standard filial) iBot Programversionerna - RSS News 0 04-25-2008 04:10
passerar asterisk till ett script som variabel GKnight Shell-programmering och Skript 9 04-02-2008 10:32

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 06-05-2008
bradtri2 bradtri2 is offline
Registered User
  
 

Join Date: juni 2008
Inlägg: 4
Hur kan man ignorera * (asterisk) i en variabel

Jag använder ett shell script för att läsa SQL uttalanden lagras i en DB2 tabellen och skriva ut dem till en fil. Mitt problem är att vissa SQL uttalanden har en "*" i dem som får lösas enligt en lista över filer i den aktuella katalogen när jag köra skriptet. Hur kan jag förhindra det "*" på väg?

Faktiska SQL: SELECT * FROM RTDS.TSPSTOPS

Resultatsidor SQL: SELECT gen.out gen.sql gen2.sql getsql.sh getsql2.sh sqlrow.out sqltxt.out test.sh FRÅN RTDS.TSPSTOPS

Kodsträngen:

sqlrow \u003d $ (DB2 + c-x hämta från c1)
fetchrc \u003d $?
echo fetchrc \u003d $ rc

echo $ (sqlrow)
  #2 (permalänk)  
Old 06-05-2008
fabtagon fabtagon is offline
Registered User
  
 

Join Date: april 2008
Plats: Europeiska unionen / Tyskland
Inlägg: 189
Citat:
sqlrow \u003d $ (DB2 + c-x hämta från c1)
Ingen rörlig här \u003d> ingen expansion kommer att äga rum. Kanske ditt exempel är för kort? Har du i verkligheten har något liknande "x \u003d $ (DB2 $ var hämta från c1)"? I detta fall surround $ var med citationstecken.
  #3 (permalänk)  
Old 06-05-2008
joeyg's Avatar
joeyg joeyg is offline Forum Staff  
Modérateur
  
 

Join Date: Dec 2007
Ort: Home av 17-Temne världen mästare Boston Celtics
Inlägg: 1311
Wink Kanske bort från vad du försöker göra, men ...

Kod:
> line1="ls *"
> echo $line1
ls 50964hdr.txt bin cbin dead.letter greetings junk.tmp masters orictl sample tmp
detta verkar vara vad du hänvisar till

Kod:
> echo "$line1"
ls *
detta 2:a exempel är vad jag tror att du försöker få
  #4 (permalänk)  
Old 06-05-2008
bradtri2 bradtri2 is offline
Registered User
  
 

Join Date: juni 2008
Inlägg: 4
Min ursäkt för mitt exempel inte vara mycket tydlig. Den "faktiska SQL" visas i min OP är värdet att hämta återkommer i skalet variabeln "sqlrow". Eftersom den faktiska SQL har en "*" i det, när jag echo $ sqlrow det * blir löst och suppleanterna i listan över filer från den aktuella katalogen.

Så, duh, jag lyckades lösa det genom att sätta citationstecken runt Variabeln ekot som: echo "$ sqlrow"

Nu tomten thickens lite. SQL lagras i ett varchar (32000) på källdatorn tabellen. När jag sätter citationstecken på eko jag nu få en post echo'd ut som 32000 bytes lång. (Den faktiska SQL uttalanden kommer att sträcka sig från 50-10000 bytes). Så jag vill inte skriva ut allt som extra utrymme på slutet av varje post.

Jag kan få längden på sql, och jag är nu försöker substr det i awk enligt följande där $ rowlen innehåller längden på sql:

sqltxt \u003d `echo" $ sqlrow "| awk '(print substr ($ 0,1, $ rl))' rl \u003d $ rowlen"

Men jag är nu får meddelandet "awk: titelinformation" SELECT * F. .. " alltför lång tid "

Vad är det bästa sättet för mig att antingen undertrycka de extra utrymmen på slutet av varje post eller substr de faktiska SQL?
  #5 (permalänk)  
Old 06-05-2008
joeyg's Avatar
joeyg joeyg is offline Forum Staff  
Modérateur
  
 

Join Date: Dec 2007
Ort: Home av 17-Temne världen mästare Boston Celtics
Inlägg: 1311
Wink tr kommandot

tr-s ""
kommer att kväva extra "" utrymme tecken

Kod:
> line2="This  2spaces   3spaces    4and5after     *"
> echo "$line2"
This  2spaces   3spaces    4and5after     *
> echo "$line2" | tr -s " "
This 2spaces 3spaces 4and5after *
  #6 (permalänk)  
Old 06-06-2008
bradtri2 bradtri2 is offline
Registered User
  
 

Join Date: juni 2008
Inlägg: 4
tack!

joeyg,
Tack för tipset om "TR" kommandot. Det gör vad jag behöver göra.

precis som en FYI hade jag också kunnat röra runt och få "cut" för att arbeta eftersom jag hade ett uttalande längd finns, men jag tror att jag ska sticka med "tr"

tack,
bp
  #7 (permalänk)  
Old 06-05-2008
shew01 shew01 is offline
Registered User
  
 

Join Date: Dec 2007
Inlägg: 41
Citat:
SQL lagras i ett varchar (32000) på källdatorn tabellen. När jag sätter citationstecken på eko jag nu få en post echo'd ut som 32000 bytes lång.
Om kolumn definieras som varchar (32000), jag förstår inte varför du läsa vad som verkar vara full bredd kolumner. Jag använder Oracle i stället för DB2, men principen bör vara densamma.

Kod:
create table my_table
	(sql_statement varchar(1000));

insert into my_table values ('select * from table2');

select sql_statement || '#' from my_table;
Här är min produktion:

Kod:
SQL_STATEMENT||'#'
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
select * from table2#

1 row selected.
Har du provat att klippa av produktionen som du väljer den från DB2 databas?

Kod:
select trim(sql_statement) || '#' from my_table;
Resultatet är detsamma (dvs. inga blanksteg för data), om inte lång rad streck ger dig ett problem:

Kod:
TRIM(SQL_STATEMENT)||'#'
-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
select * from table2#

1 row selected.
Closed Thread

Komihåglista

Taggar
awk, awk trim, trim, trim awk

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 05:08.


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