The UNIX and Linux Forums  
Hallo en welkom van de Verenigde Staten aan de UNIX en Linux Forum! Bedankt voor uw bezoek en Deelnemen aan onze wereldwijde gemeenschap.

Go Back   De Unix-en Linux Forum > Top Forums > Programmeren en Shell Scripting
.
google unix.com



Programmeren en Shell Scripting Post vragen over KSH, CSH, SH, Bash, Perl, PHP, sed, awk en andere shell scripts en shell scripting talen hier.

Meer UNIX en Linux Forum Onderwerpen Misschien vindt u Helpful
Draad Thread Starter Forum Antwoorden Last Post
Asterisk op IPCop Asterisk 1.4.20 voor IPCop 1.4.18 (Default branch) iBot Software releases - RSS Nieuws 0 05-21-2008 08:40 PM
Asterisk op IPCop Asterisk 1.4.19.2 voor IPCop 1.4.18 (Default branch) iBot Software releases - RSS Nieuws 0 05-14-2008 07:20
Asterisk op IPCop IPCop 1.4.18 met Asterisk 1.4.19.1 (Asterisk IPCop ISO bijkantoor) iBot Software releases - RSS Nieuws 0 04-26-2008 04:10
Asterisk op IPCop Asterisk 1.4.19.1 voor IPCop 1.4.18 (Default branch) iBot Software releases - RSS Nieuws 0 04-25-2008 04:10 PM
sterretje bij het passeren van een script als variabele GKnight Programmeren en Shell Scripting 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 Zoeken in deze Thread Rate Thread Display Modes
  #1 (permalink)  
Old 06-05-2008
bradtri2 bradtri2 is offline
Geregistreerde gebruiker
  
 

Join Date: juni 2008
Posten: 4
Hoe te negeren * (sterretje) in een variabele

Ik gebruik een shell script te lezen SQL statements opgeslagen in een DB2-tabel en schrijft het naar een bestand. Het probleem dat ik heb is dat sommige SQL statements hebben een "*" in hen, die wordt opgelost als de lijst met bestanden in de huidige directory toen ik het script. Hoe kan ik voorkomen dat het "*" worden opgelost?

Werkelijke SQL: SELECT * FROM RTDS.TSPSTOPS

Uitslag SQL: SELECT gen.out gen.sql gen2.sql getsql.sh getsql2.sh sqlrow.out sqltxt.out test.sh UIT RTDS.TSPSTOPS

Codefragment:

sqlrow \u003d $ (db2 + c-x halen uit c1)
fetchrc \u003d $?
echo fetchrc \u003d $ rc

echo $ () sqlrow
  #2 (permalink)  
Old 06-05-2008
fabtagon fabtagon is offline
Geregistreerde gebruiker
  
 

Join Date: april 2008
Locatie: Europese Unie / Duitsland
Posts: 189
Citaat:
sqlrow \u003d $ (db2 + c-x halen uit c1)
Geen variabele hier \u003d> geen uitbreiding zal plaatsvinden. Misschien is uw voorbeeld is te kort? Bent u het in werkelijkheid hebben iets als "x \u003d $ (db2 $ var halen uit c1)"? In dit geval surround $ var met aanhalingstekens.
  #3 (permalink)  
Old 06-05-2008
joeyg's Avatar
joeyg joeyg is offline Forum Staff  
modérateur
  
 

Join Date: december 2007
Locatie: Home 17-time wereld kampioen Boston Celtics
Berichten: 1311
Wink Misschien uit wat je probeert te doen, maar ...

Code:
> line1="ls *"
> echo $line1
ls 50964hdr.txt bin cbin dead.letter greetings junk.tmp masters orictl sample tmp
Dit lijkt te worden wat u verwijzen naar

Code:
> echo "$line1"
ls *
deze 2de voorbeeld is wat ik denk dat je probeert te krijgen
  #4 (permalink)  
Old 06-05-2008
bradtri2 bradtri2 is offline
Geregistreerde gebruiker
  
 

Join Date: juni 2008
Posten: 4
Mijn excuses voor mijn voorbeeld niet erg duidelijk. De "werkelijke SQL" wordt weergegeven in mijn OP is de waarde die het ophalen zal terugkeren in de shell variabele sqlrow ". Aangezien de werkelijke SQL is een "*" in, als ik echo $ sqlrow, de * krijgt opgelost en substituten op de lijst van bestanden uit de huidige directory.

Ja, duh, ik was in staat op te lossen die door dubbele aanhalingstekens rond de variabele op de echo zoals: echo "$ sqlrow"

Nu, de plot een beetje dikker. De SQL wordt opgeslagen in een varchar (32000) van de bron tabel. Wanneer ik de dubbele aanhalingstekens op de echo, ik nu een record echo'd dat is 32000 bytes lang. (De werkelijke SQL statements zal variëren van 50 tot 10000 bytes). Dus, ik wil niet schrijven al dat extra ruimte op het einde van elk record.

Ik kan de lengte van de SQL, en ik ben nu proberen te substr in awk als volgt waarbij $ rowlen bevat de lengte van de SQL:

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

Maar ik ben nu de boodschap "awk: record" SELECT * F. .. ' te lang "

Wat is de beste manier voor mij om te onderdrukken of de extra ruimtes op het einde van elk record of substr de werkelijke SQL?
  #5 (permalink)  
Old 06-05-2008
joeyg's Avatar
joeyg joeyg is offline Forum Staff  
modérateur
  
 

Join Date: december 2007
Locatie: Home 17-time wereld kampioen Boston Celtics
Berichten: 1311
Wink tr commando

tr-s ""
zal onderdrukken extra "" ruimte charcters

Code:
> line2="This  2spaces   3spaces    4and5after     *"
> echo "$line2"
This  2spaces   3spaces    4and5after     *
> echo "$line2" | tr -s " "
This 2spaces 3spaces 4and5after *
  #6 (permalink)  
Old 06-06-2008
bradtri2 bradtri2 is offline
Geregistreerde gebruiker
  
 

Join Date: juni 2008
Posten: 4
Bedankt!

joeyg,
bedankt voor de tip over de "tr" commando. Het is te doen wat ik het nodig om te doen.

net zoals een FYI, ik was ook in staat om rotzooi rond en de "cut krijgen" commando naar het werk, omdat ik de verklaring lengte beschikbaar was, maar ik denk dat ik stok met "tr"

bedankt,
bp
  #7 (permalink)  
Old 06-05-2008
shew01 shew01 is offline
Geregistreerde gebruiker
  
 

Join Date: december 2007
Posts: 41
Citaat:
De SQL wordt opgeslagen in een varchar (32000) van de bron tabel. Wanneer ik de dubbele aanhalingstekens op de echo, ik nu een record echo'd dat is 32000 bytes lang.
Als de kolom is gedefinieerd als varchar (32000), ik begrijp niet waarom u het ophalen van wat lijkt te zijn volledige breedte van de kolommen. Ik ben met behulp van Oracle in plaats van DB2, maar het principe moet dezelfde zijn.

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

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

select sql_statement || '#' from my_table;
Hier is mijn output:

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

1 row selected.
Heeft u geprobeerd het knippen van de output zoals u selecteren uit de DB2 database?

Code:
select trim(sql_statement) || '#' from my_table;
De output is hetzelfde (dwz geen naloopspaties voor de gegevens), tenzij de lange lijn van streepjes geeft u een probleem:

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

1 row selected.
Closed Thread

Bladwijzers

Labels
awk, awk trim, trim, trim awk

Thread Tools Zoeken in deze Thread
Zoeken in deze Thread:

Uitgebreid zoeken
Display Modes Beoordeel deze draad
Beoordeel deze draad:

Posting Regels
Jij mag niet Post Nieuwe threads
Jij mag niet na antwoorden
Jij mag niet post attachments
Jij mag niet bewerk uw berichten

BB code is Aan
Smilies zijn Aan
[IMG] code Aan
HTML-code is Uit
Trackbacks zijn Aan
Pingbacks zijn Aan
Refbacks zijn Aan




Alle tijden zijn GMT -4. Het is nu 02:06 PM.


Powered by: vBulletin, Copyright © 2000 - 2006, Jelsoft Enterprises Limited. Vertalingen Powered by .
vBCredits v1.4 Copyright © 2007 - 2008, PixelFX Studios
De Unix-en Linux Forums Copyright © 1993-2009. Alle rechten Reserved.Ad Beheer door RedTyger

Content Relevante URL's door vBSEO 3.2.0