Shell Script for Schleife Problem

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Wormi
Beiträge: 123
Registriert: 08.08.2004 09:21:03
Kontaktdaten:

Shell Script for Schleife Problem

Beitrag von Wormi » 13.08.2014 11:41:44

Hallo zusammen,

ich habe ein Shell-Script mit 2 for-Schleifen ineinander, welches aber nicht das gewünschte Ergebnis liefert.

Code: Alles auswählen

#!/bin/sh

name='Lisa Hans Mark'
fach="1 2 3"

for name in $name
do

for fach in $fach
do
echo $name-$fach
done

done
Gewünschtes Ergebnis:

Code: Alles auswählen

Lisa-1
Lisa-2
Lisa-3
Hans-1
Hans-2
Hans-3
Mark-1
Mark-2
Mark-3
Tatsächliches Ergebnis des Scripts:

Code: Alles auswählen

Lisa-1
Lisa-2
Lisa-3
Hans-3
Mark-3
Was genau mache ich falsch?

Gruß Wormi

linuxCowboy
Beiträge: 287
Registriert: 05.02.2013 19:47:41

Re: Shell Script for Schleife Problem

Beitrag von linuxCowboy » 13.08.2014 11:54:34

Code: Alles auswählen

#!/bin/sh
name='Lisa Hans Mark'
fach=3

for name in $name; do
    for fach in `seq $fach`; do
        echo $name-$fach
    done
done
-der_linux_cowboy --- Besser werden! ... f*** w$$

Benutzeravatar
detix
Beiträge: 1699
Registriert: 07.02.2007 18:51:28
Wohnort: MK

Re: Shell Script for Schleife Problem

Beitrag von detix » 13.08.2014 12:11:00

Nach dem ersten Durchlauf ist die Variable "fach" schon mit 3 belegt, dürfte danach so aussehen:
for fach in 3; do...
auch so gehts:

Code: Alles auswählen

for name in $name; do
  for fach2 in $fach; do
    echo $name-$fach2
  done
done
Gruß an alle Debianer, und immer daran denken:
Macht ohne Haftung funktioniert nicht!

Wormi
Beiträge: 123
Registriert: 08.08.2004 09:21:03
Kontaktdaten:

Re: Shell Script for Schleife Problem

Beitrag von Wormi » 13.08.2014 13:00:35

Aaaah genau, das erklärt es! Vielen dank für die schnellen antworten!

uname
Beiträge: 12044
Registriert: 03.06.2008 09:33:02

Re: Shell Script for Schleife Problem

Beitrag von uname » 13.08.2014 13:36:58

Deine Lösung könntest du z.B. so umschreiben. Wie man sieht musst du zwischen der Laufvariablen i/j und den Arrays name/fach unterscheiden.

Code: Alles auswählen

#!/bin/sh

name='Lisa Hans Mark'
fach="1 2 3"

for i in $name
do

for j in $fach
do
echo $i-$j
done

done
Im übrigen solltest du den Shebang-Zeile (erste Zeile) anpassen, da es z.B. bei sh == zsh zu Problemen kommt. Arrays funktionieren scheinbar nur mit bash, dash und ksh. Auch würde ich wie in den anderen Beispielen beschrieben immer einrücken auch wenn es dem Programm egal ist.

Antworten