Dateinamen als laufende Parameter

L

Lock3

Grünschnabel
Hiho...

Ich bin ein totaler Script-Neuling und habe ein Problem mit einer Parameterzuweisung und weiß net so recht weiter. Bin mir aber ziemlich sicher dass das Problem trivial sein dürfte...Habe hier aber nix zu gefunden.

Ich habe in einem Ordner etliche Dateien liegen, wobei alle Dateinamen die auf .sys enden als laufende Parameter a,b,c... vergeben werden sollen.

Also im Ordner sind z.B. die Dateien:
123.sys 456.sys 789.sys

Die Parameter sollen dann lauten
$a=123.sys
$b=456.sys
$c=789.sys

Ick weiß bisher nur, dass ich mit ls *.sys die Auflistung aller relevanter Namen bekomme. Hab auch schon probiert diese Auflistung dann in eine Datei zu schreiben um dann Zeile für Zeile als Parameter zu vergeben.Also sowas alâ:

ls *.sys > modelle.log
$a= 'read l1 < modelle.log'
...

Wie ihr euch sicher denken könnte läuft das aber nicht :)

Wäre für jeden Tipp dankbar!
 
Hi,

wenn du jede Datei einzeln verarbeiten willst, reicht eine simple for-Schleife:
Code:
for file in *.sys; do 
    echo $file
done
Ansonsten wahrscheinlich am besten mit Arrays (<edit>in der Annahme dass du die bash benutzt</edit>):
http://tldp.org/LDP/abs/html/arrays.html

die korrekte Zuweisung waere "a=123.sys", $a wird durch den Inhalt der Variablen a ersetzt, was vermutlich zu einem Syntaxfehler fuehren wird.

mfg,
bytepool
 
Zuletzt bearbeitet:
Also du willst im Prinzip ein Script mit unbekannter Anzahl an Parameter aufrufen, und diese dann weiter bearbeiten?

Das ginge z.Bsp. so
Code:
#!/bin/bash
echo "\$0 (Script): $0";
echo "\$# (AnzParam): $#";
echo "\$* (Params): $*";

ARGS="$*";

for ARG in $*; do
 echo "$ARG";
done;
Code:
 test.sh hillo hallo
$0 (Script): /home/alex/bin/test.sh
$# (AnzParam): 2
$* (Params): hillo hallo
hillo
hallo

/Edit: Oh, da hab ich aber sehr lange getippt ;)
/Edit: Und dann auch noch Zitieren mit Editieren verklickt^^
 
Zuletzt bearbeitet:
die korrekte Zuweisung waere "a=123.sys", $a wird durch den Inhalt der Variablen a ersetzt, was vermutlich zu einem Syntaxfehler fuehren wird.
Jop...Schusselfehler meinerseits

Also der Tip mit den Array war gut! Danke!
Also mit
Code:
for file in *.sys; do 
    echo $file
done
geht es nicht. Er erfasst die Dateinamen zwar als Parameter, aba in dem Script wird vom Benutzer über eine Eingabe abgefragt, mit welchen der .sys Dateien er weiterarbeiten soll.

PS: Pro Ordner liegen Maximal neun .sys Dateien ... es geht also maximal bis Parameter i=dsf.sys

Habs jetzt mal so probiert:
Code:
for Par in *.sys
do a=${Par[0]} ; b=${Par[1]} ; c=${Par[2]}; d=.... ; ........
done

Wenn ich ihn aber mit echo ${#area[*]} abfrage, wie viele Elemente er in dem Parameter "Par" drin hat, stellt sich raus dass nur ein Parameter drin ist.
Liegt vll daran, dass er die Dateinamen mit dem Befehl "for Par in *.sys" nicht in eine Zeile schreibt, sondern jeden Dateinamen in eine neue Zeile?!

Gruß...die ahnungslose Lock3
 
Zuletzt bearbeitet:
Hi,
Also mit
Code:
for file in *.sys; do 
    echo $file
done
geht es nicht.
richtig, weil die von mir genannte Praemisse nicht gilt, du willst nicht jede Datei einzeln verarbeiten.
Du scheinst nicht zu wissen wie eine for-Schleife funktioniert, bei Interesse einfach nachlesen.

Wenn du einen Array benutzen willst, musst du ihn natuerlich erst fuellen, z.B. so:
Code:
i=0
for file in *.sys; do 
	files[$i]="$file"
	i=$((i + 1))
done
echo ${files[*]}
Sehr spaetes Edit:
Aehem, den Array zu fuellen geht natuerlich noch viel schneller, einfacher und logischer...
Code:
files=( *.sys )
*schaem*

mfg,
bytepool
 
Zuletzt bearbeitet:

Ähnliche Themen

Falsche Rechte gesetzt beim Anlegen von Ordnern via Samba-Client

Array im Dateinamen wird nicht erkannt

Zurück
Oben