Array

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von flugopa, 29.08.2008.

  1. #1 flugopa, 29.08.2008
    flugopa

    flugopa Der lernwillige

    Dabei seit:
    27.05.2006
    Beiträge:
    739
    Zustimmungen:
    0
    Ort:
    München
    Hallo,

    Textdatei "test.txt" mit dem Inhalt:
    wort1 wort2 zahl1 zahl2

    Wie sollte man diese Datei auslesen damit die Variablen
    Code:
    echo "$Var[1]" # wort1
    echo "$Var[2]" # wort2
    echo "$Var[3]" # zahl1
    echo "$Var[4]" # zahl2
    
    So geht es nicht
    #!/bin/sh
    VAR=`cat test.txt | awk '{print $1,$2,$3,$4}'`
    echo "$VAR[1]"
    echo "$VAR[2]"
    echo "$VAR[3]"
    echo "$VAR[4]"
    
    erhalte?
     
  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 Wolfgang, 29.08.2008
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hast du dir mal die Option -a für das Bash-buildin read angesehen? ;)

    Gruß Wolfgang
     
  4. #3 flugopa, 30.08.2008
    flugopa

    flugopa Der lernwillige

    Dabei seit:
    27.05.2006
    Beiträge:
    739
    Zustimmungen:
    0
    Ort:
    München
    Danke für den Tip.
    Wenn ich darf; Frage ich gleich weiter: (siehe Code)
    Ergebnis:
    Code:
    declare -a ARRAY_1
    ARRAY_1=(wort1 wort2 zahl1 zahl2)
    
    ARRAY_INHALTS_ZAEHLER= ??? # << Wie bekomme ich die Anzahl der Einträge aus ARRAY_1 ?
    
    for (( Zaehler = 0; $ARRAY_INHALTS_ZAEHLER > Zaehler; Zaehler++ ))  do
        echo "$Zaehler: ${ARRAY_1[$Zaehler]}"
    done
    unset ARRAY_1 Zaehler
    
     
  5. #4 Wolfgang, 30.08.2008
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Du suchst eventuell das hier:
    Code:
    $ARRAY_INHALTS_ZAEHLER=${#ARRAY_1[@]};
    
    Andererseits läßt die Bash ein einfacheres Verarbeiten von Arrays zu, d.h. die C-Syntax ist nicht nötig.
    Code:
    ARR=(Wert1 Wert2 Wert3);
    for i in "${ARR[@]}"; do
    echo $i
    ...
    done
    
    Wobei der Sonderfall: "${ARR[*]}" alle Elemente zu einem String joint.

    Gruß Wolfgang
     
  6. #5 flugopa, 30.08.2008
    flugopa

    flugopa Der lernwillige

    Dabei seit:
    27.05.2006
    Beiträge:
    739
    Zustimmungen:
    0
    Ort:
    München
    Danke für Dein Tip.
    Frage: Seit wieviel Jahren beschäftigst Du dich mit Linux?

    Ergebnis der Hilfe:
    Code:
    $ cat Array.sh
    #!/bin/sh
    clear
    declare -a ARRAY_1
    ARRAY_1=(1234567 wort2 zahl1 zahl2 88)
    
    #cat test.txt >$ARRAY_1
    
    ARRAY_INHALTS_ZAEHLER=${#ARRAY_1[*]}
    echo -e "Es sind $ARRAY_INHALTS_ZAEHLER Einträge vorhanden.\n"
    
    for (( Zaehler = 0; $ARRAY_INHALTS_ZAEHLER > Zaehler;Zaehler++ ))  do
        echo -e "Eintrag `expr $Zaehler + 1` : ${ARRAY_1[$Zaehler]}\tZeichenlänge: ${#ARRAY_1[$Zaehler]}"
    done
    
    unset ARRAY_1 Zaehler
    
     
  7. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  8. #6 Gott_in_schwarz, 30.08.2008
    Gott_in_schwarz

    Gott_in_schwarz ar0

    Dabei seit:
    22.04.2007
    Beiträge:
    546
    Zustimmungen:
    0
    Ort:
    Niedersachsen
    Bourne shell hat keine arrays. Nimm lieber /bin/ksh oder /bin/bash als shebang. (wahrscheinlich bash.)
    Und wenn du schon diese c-for-schleife benutzt, kannst du auch statt `expr $z + 1` einfach $(($zaehler+1)) nehmen.
    Ich würde von der c-for-Schleife abraten, selbst, wenn du den aktuellen array-Index brauchst. Das scheint zwar eher ein Testscript von dir zu sein, aber ich sags trotzdem mal.
    Der Sinn vom "declare -a" erschließt sich mir nicht, aber naja.
    Das array musst du am Ende auch nicht unsetten, das geht ja mit Ende des Skripts "out of scope". (Es sei denn du "sourced" das Skript, womit deine shebang wiederum sinnfrei wäre...)
     
  9. #7 Wolfgang, 30.08.2008
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Wer das missachtet, muss sich nicht wundern, wenn die Antworten zur Standardshell unter Linux bekommt.
    Sollte /bin/sh ein Link auf die bash sein, geht es.
    Geht es um den unter Buntie üblichen Link auf die DASH geht es so nicht.

    Dash kennt IMHO weder Array noch declare

    @Gott_in_schwarz
    Ich glaube eher nicht, dass der TE das Orginal (Bourne Shell) verwendet.

    Gruß Wolfgang
     
Thema:

Array

Die Seite wird geladen...

Array - Ähnliche Themen

  1. Daten UND Betriebssystem, alles auf einem SW-RAID1-Array...?

    Daten UND Betriebssystem, alles auf einem SW-RAID1-Array...?: Hallo zusammen Wollte fragen wie man sowas macht, leider finde ich im Internet immer nur die Anleitungen wo davon ausgegangen wird dass eine sep....
  2. Php: User defined function inside array

    Php: User defined function inside array: Hi Alle, Ich habe ein Problem mit PHP: habe eine funktion definiert: function test($a1) {return($a1*5);}kann diese auch wie gewohnt als teil...
  3. bash: Fehlermeldung und Werte in Array sortieren?

    bash: Fehlermeldung und Werte in Array sortieren?: Hallo, ich probiere den ganzen Tag schon mir bestimmte Teile aus einer Riesentextdatei ausgeben und in mehrere kleine Dateien schreiben zu...
  4. Array mit Werte - die Leerzeichen beinhalten - abfüllen

    Array mit Werte - die Leerzeichen beinhalten - abfüllen: Hallo zusammen Bin neu hier und hab direkt eine Frage... Ich habe ein Befehl der mir einige Zeilen mit Werten ausgibt: Befehl:...
  5. RUBY tree_depth eines Arrays

    RUBY tree_depth eines Arrays: Hallo, ich habe da eine Aufgabe: Ich soll die Baumtiefe eines beliebig mehrdimensionalen Arrays bestimmen. Die Funktion soll so aussehen:...