Dateinamen als laufende Parameter

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von Lock3, 05.01.2010.

  1. Lock3

    Lock3 Grünschnabel

    Dabei seit:
    05.01.2010
    Beiträge:
    3
    Zustimmungen:
    0
    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!
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 bytepool, 05.01.2010
    Zuletzt bearbeitet: 05.01.2010
    bytepool

    bytepool Code Monkey

    Dabei seit:
    12.07.2003
    Beiträge:
    791
    Zustimmungen:
    0
    Ort:
    /home/sweden/göteborg
    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
     
  4. #3 daboss, 05.01.2010
    Zuletzt bearbeitet: 05.01.2010
    daboss

    daboss Keine Macht für niemand!

    Dabei seit:
    05.01.2007
    Beiträge:
    1.294
    Zustimmungen:
    0
    Ort:
    sydney.australia.world
    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^^
     
  5. #4 Lock3, 05.01.2010
    Zuletzt bearbeitet: 05.01.2010
    Lock3

    Lock3 Grünschnabel

    Dabei seit:
    05.01.2010
    Beiträge:
    3
    Zustimmungen:
    0
    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
     
  6. #5 bytepool, 05.01.2010
    Zuletzt bearbeitet: 23.02.2010
    bytepool

    bytepool Code Monkey

    Dabei seit:
    12.07.2003
    Beiträge:
    791
    Zustimmungen:
    0
    Ort:
    /home/sweden/göteborg
    Hi,
    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
     
Thema:

Dateinamen als laufende Parameter

Die Seite wird geladen...

Dateinamen als laufende Parameter - Ähnliche Themen

  1. [FRAGE] Dateinamen normalisieren während sie in einer "for" Schleife sind

    [FRAGE] Dateinamen normalisieren während sie in einer "for" Schleife sind: Moin Gemeinde, ich habe ein Skript welches Emails abholt und weiterverarbeitet, manche müssen ausgedruckt werden. Nun hat sich herausgestellt...
  2. Einfaches Shellscript - dateinamen ändern

    Einfaches Shellscript - dateinamen ändern: Hey, kann mir jemand vielleicht bei diesem miniscript helfen? ich habe dateien die folgendermaßen aussehen MM-DD-YY-dateiname und...
  3. Wie verschiedene Pattern in diversen Dateinamen finden und ersetzen?

    Wie verschiedene Pattern in diversen Dateinamen finden und ersetzen?: Hi Leute. Ich habe ein kleines Problem. Ich möchte mittels Bash nach bestimmten pattern in Dateinamen suchen und diese durch "nichts"...
  4. Wie finde ich Leerzeichen im dateinamen

    Wie finde ich Leerzeichen im dateinamen: Hallo, ich habe ein script mit einer Schleife über alle Dateien in einem Verzeichnis. #!/bin/sh for i in `ls *` do echo $i...
  5. Zahl innerhalb eines Dateinamens auslesen

    Zahl innerhalb eines Dateinamens auslesen: Hallo, ich habe eine große Anzahl an Dateien mit konstantem Dateinamen + einer Zahl, allerdings sind sie nicht fortlaufend nummeriert, also...