Sie sind nicht angemeldet.

  • »Baron Fel« ist der Autor dieses Themas

Beiträge: 27

Registrierungsdatum: 12.02.2010

Derivat: Ubuntu

Architektur: 32-Bit PC

  • Nachricht senden

1

13.07.2011, 17:44

gleichzeitiges hochzählen einer string und einer zahl variablen

Hallo zusammen

ich habe folgendes Problem:
ich habe zum einen eine reihe strings dem jeweils eine bestimmte zahl zugewiesen ist. Bsp:

Quellcode

1
2
3
4
EOg 1
JKg 2
KTg 3
KTv 4


Nun muss ich brauch ich string und zahl getrennt von einander aber die beiden müssen immer noch zusammen passen.
Ich wollte das in zwei Schleifen durchlaufen lassen, wo die 2 Schleife (mit den zahlen) eins hochzählt wenn die 1 Schleife (mit den strings) durchläuft.
Bei mir sieht das ungefähr so aus:

Quellcode

1
2
3
4
5
6
7
for file in EOg JKg KTg KTv; do
	if (( (file % 1) == 1 )); then
			(( a++ ))
echo "ich zähle jetzt:"
echo "$file Num: $a"
	fi
done


Mein Problem ist das, dass so nicht geht... :wacko:
wenn anstelle von

Quellcode

1
 if (( ( file % 1 ) == 1)); then 
jedoch

Quellcode

1
 if (( ( file % 2 ) == 1)); then 
steht, dann funktioniert es, aber nur alle 2 Durchgänge. Wie bekomme ich das hin, das es bei jedem Durchgang funktioniert ?(

danke schon mal

Soni

User

Beiträge: 204

Registrierungsdatum: 13.12.2009

Derivat: Kein Ubuntu-Derivat

Architektur: 64-Bit PC

  • Nachricht senden

2

14.07.2011, 09:40

Modulorechnen ist aber schon bekannt?
1 % 1 = 0
2 % 1 = 0
....
file % 1 wird NIE 1 werden =)

Für dein Zeug reicht auch ein

Quellcode

1
2
3
4
5
6
#!/bin/bash
for file in EOg JKg KTg KTv; do
			(( a++ ))
echo "ich zähle jetzt:"
echo "$file Num: $a"
done

Zitat von ».user«

doch, die ganze Welt besteht aus fenstern!

3

14.07.2011, 14:34

Wenn Strings und Zahlen im festen Zusammenhang sein sollen, könnte man auch ein Array nehmen und dabei gleich die for-Schleife eliminieren. Die beiden echos lassen sich auch zusammenfassen ;)

Quellcode

1
2
3
4
unset a; file=([1]=EOg JKg KTg KTv); 
while [ $((a++)) -lt ${#file[*]} ]; do {
    echo "ich zähle jetzt: ${file[$a]} Num: $a"; 
    } done
"file=([1]=EOg...", weil offenbar mit Index "1" begonnen werden soll. ansonsten würde file=(EOg JKg KTg KTv) genügen, aber bei "0" anfangen.
Beim Erstellen dieser Nachricht kamen keine Tiere zu Schaden.
me is all sausage
but don't call me Ferdl