Sie sind nicht angemeldet.

Lieber Besucher, herzlich willkommen bei: Linux Forum Linux-Web.de. Falls dies Ihr erster Besuch auf dieser Seite ist, lesen Sie sich bitte die Hilfe durch. Dort wird Ihnen die Bedienung dieser Seite näher erläutert. Darüber hinaus sollten Sie sich registrieren, um alle Funktionen dieser Seite nutzen zu können. Benutzen Sie das Registrierungsformular, um sich zu registrieren oder informieren Sie sich ausführlich über den Registrierungsvorgang. Falls Sie sich bereits zu einem früheren Zeitpunkt registriert haben, können Sie sich hier anmelden.

1

13.05.2004, 07:38

SHELL= datei auslesen

Hallo zusammen,
ich hoffe hier kann man mir helfen.
ich habe drei datein

DATAFILE="/ora_2/oradata/backup/cold/DATAFILE.lst";
LOGFILE="/ora_2/oradata/backup/cold/LOGFILE.lst";
CONTROLFILE="/ora_2/oradata/backup/cold/CONTROLFILE.lst";

diese drei datein, möchte ich auslesen.
der inhalt dieser datein. sehen so ca aus.
/ora_2/test/DBTEST33/system01.dbf
/ora_2/test/DBTEST33/undotbs01.dbf
/ora_2/test/DBTEST33/indx01.dbf
/ora_2/test/DBTEST33/tools01.dbf
/ora_2/test/DBTEST33/users01.dbf

ich muss es jetzt schaffen, jede datei einzelnt auszulesen. und jede zeile ( also jede datei) in eien variable oder arry rein zuschreiben. aber das bekomme ich absoult nicht hien.
kann mir jemand hier helfen ?
wäre super

2

13.05.2004, 09:13

Muss es denn unbedingt ein Shell-Script sein?
In Perl wäre das im Handumdrehen gemacht!
(hängt aber vom endgültigen Einsatzzweck ab)

Michael
Life is like ice cream: enjoy it before it melts!
"If there is (a God), all evidence indicates that He hates me." - Matt Groening

3

13.05.2004, 09:14

jep muss in shell sein
sonts wäre es ja zu leicht :-)
ne im ernst muss leider shell sein

4

13.05.2004, 10:51

Also mache ich hier mal den Anfang ;)
Leider programmiere ich viel zu selten Shell-Scripte, so dass dies nur einen Anfang darstellen kann ...

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/bin/sh

Datei=textdatei
exec 0<"$Datei"

line_count=`wc $Datei | awk '{ print $1 }'`  # Zeilen in Datei

for line in `seq $line_count`
do
  read line
  echo $line
done

exit 0


Michael
Life is like ice cream: enjoy it before it melts!
"If there is (a God), all evidence indicates that He hates me." - Matt Groening

5

13.05.2004, 10:58

erstmal ein dankeschön für deine bemühungen

ich habe gerade dein script benutzt.
er kennt den befehel seq leider nicht

./test.sh[37]: seq: not found

:-(

6

13.05.2004, 11:00

Mist, in Deinem Profil steht ja "Solaris" ;)
Da steht /bin/sh noch für das Original!
Hast Du auch ne bash installiert? (wenn ja, erste Zeile auf #!/pfad/zu/bash umstellen) Ansonsten kann ich Dir nicht helfen ...


Michael
Life is like ice cream: enjoy it before it melts!
"If there is (a God), all evidence indicates that He hates me." - Matt Groening

7

13.05.2004, 11:07

hehe
hatte vorhien schon mit ksh und bash getestet
geht leider beides nicht
ich bin auch der meinung das es diesen befehel seq garnicht in der shell gibt

8

13.05.2004, 11:12

sowieso ;)
man seq: seq - print a sequence of numbers

Michael
Life is like ice cream: enjoy it before it melts!
"If there is (a God), all evidence indicates that He hates me." - Matt Groening

9

13.05.2004, 11:25

guck mal ich habe das jetzt so gelöst

n=1
while read line ;
do
eval "line$n=\"$line\""
n=`expr $n + 1`
done < $DATAFILE

klappt jetzt auch wunderbar
nur jetzt muss ich ergentwie mit basename die ausgabe spalten
also z.b. bei $line1 ein basename drauf das ich nur noch den dateinamen habe.

10

13.05.2004, 11:34

seq ist ein eigenstaendiges Programm und keine Built-in bash Kommando.

Gruss,
kp

Chucky the Devil

Pianist im Puff

  • »Chucky the Devil« ist männlich

Beiträge: 1 636

Wohnort: Koeln

Beruf: Network Architect

  • Nachricht senden

11

13.05.2004, 12:41

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
$ for i in $(cat test);do echo $i;done
/ora_2/test/DBTEST33/system01.dbf
/ora_2/test/DBTEST33/undotbs01.dbf
/ora_2/test/DBTEST33/indx01.dbf
/ora_2/test/DBTEST33/tools01.dbf
/ora_2/test/DBTEST33/users01.dbf

$ x=0;for i in $(cat test);do echo $x: $i;x=$(($x+1));done 
0: /ora_2/test/DBTEST33/system01.dbf
1: /ora_2/test/DBTEST33/undotbs01.dbf
2: /ora_2/test/DBTEST33/indx01.dbf
3: /ora_2/test/DBTEST33/tools01.dbf
4: /ora_2/test/DBTEST33/users01.dbf

$ x=0;for i in $(cat test);do eval y$x=$i;x=$(($x+1));done
$ echo $y2
/ora_2/test/DBTEST33/indx01.dbf


Laesst sich beliebig weiterspinnnen das Spielchen...

12

13.05.2004, 13:03

das ist jetzt aber (t)csh, oder?
Life is like ice cream: enjoy it before it melts!
"If there is (a God), all evidence indicates that He hates me." - Matt Groening

Chucky the Devil

Pianist im Puff

  • »Chucky the Devil« ist männlich

Beiträge: 1 636

Wohnort: Koeln

Beruf: Network Architect

  • Nachricht senden

13

13.05.2004, 13:32

Nee, da war 'ne orig. sh.
Wobei ich das ganze auch auf 'ner zsh und bash getestet habe - mit (t)csh funktioniert das so nicht.

[Edit]Auch mit ksh funktionierts[/Edit]

14

13.05.2004, 13:56

> mit (t)csh funktioniert das so nicht.

ist mir kurz danach auch aufgefallen :crazy: *peinlich*
(wobei ich mein Posting nicht wegzensieren wollte)

Michael
Life is like ice cream: enjoy it before it melts!
"If there is (a God), all evidence indicates that He hates me." - Matt Groening

Thema bewerten