While Anweisung verwenden in Schleife?

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
pangu
Beiträge: 1400
Registriert: 15.11.2011 20:50:52
Lizenz eigener Beiträge: GNU General Public License
Wohnort: /proc/1

While Anweisung verwenden in Schleife?

Beitrag von pangu » 31.10.2012 16:19:07

Hallo nochmal,

wie kann ich eigentlich in einem Bash Skript folgendes erzielen? Ich habe zwar Google gefragt, und es muss wohl mit der While Anweisung funktionieren. Aber wenn dann die Bedingung gefunden wird und das break ausgeführt wird, bin ich aus der Schleife raus. Ich möchte aber einen bestimmten Wert nur überspringen.

beispiel: Wenn i=123 ist, soll einfach übersprungen werden, damit das echo nicht ausgegeben wird. Goto und so 'n Quatsch gibts ja bei Bash nicht, wenn ich mich recht erinnere?

Code: Alles auswählen

for (( i=0; i<=1000; i++))
do
 echo "Jetzt bin ich bei $i"
done
Wie baut man das denn ein? Die Ausgabe sollte dann quasi sein:
...
Jetzt bin ich bei 120
Jetzt bin ich bei 121
Jetzt bin ich bei 122
Jetzt bin ich bei 124
Jetzt bin ich bei 125
...
Grüße,
Pangu.
Man gibt Geld aus, das man nicht hat, um damit Dinge zu kaufen, die man nicht braucht, um damit Leute zu beeindrucken, die man nicht mag.

Benutzeravatar
goeb
Beiträge: 348
Registriert: 26.08.2006 18:12:08
Lizenz eigener Beiträge: MIT Lizenz

Re: While Anweisung verwenden in Schleife?

Beitrag von goeb » 31.10.2012 16:29:04

In der Schleife:

Code: Alles auswählen

(( i == 123 )) && continue
Oder ausführlicher:

Code: Alles auswählen

if [[ $i -eq 123 ]] ; then
  continue
fi

Benutzeravatar
r900
Beiträge: 1053
Registriert: 09.10.2011 20:06:11
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Stockholm

Re: While Anweisung verwenden in Schleife?

Beitrag von r900 » 31.10.2012 16:52:10

Oder.. nur um zu zeigen wie viele Möglichkeiten es gibt

Code: Alles auswählen

for i in {0..1000}
do
 (( i != 123 )) && echo "Jetzt bin ich bei $i"
done
Aber continue solltest du dir auf jeden Fall merken. Bücher werden als Informationsquelle heutzutage vollkommen vernachlässigt wie mir scheint.. :wink:

So geht's auch

Code: Alles auswählen

for i in {0..122} {124..1000}
do
 echo "Jetzt bin ich bei $i"
done
Eigentlich besser weil dann nicht 1000 mal ein unnötiger Test durchgeführt werden muss. :D

Benutzeravatar
pangu
Beiträge: 1400
Registriert: 15.11.2011 20:50:52
Lizenz eigener Beiträge: GNU General Public License
Wohnort: /proc/1

Re: While Anweisung verwenden in Schleife?

Beitrag von pangu » 31.10.2012 18:40:08

ok danke euch. Jetzt fällt mir was ganz anderes ein. Könnte ich es nicht irgendwie so machen?

Code: Alles auswählen

for (( i=0; i<=1000; i++))
do
if ! [$h=2]
 echo "Jetzt bin ich bei $i"
fi
done
Wäre doch am einfachsten und simpelsten, oder nicht? Aber ich hab wohl nen falschen Syntax weil es nicht geht :) hab auch "if [$h!=2] probiert, war aber auch nix.

EDIT: Ich glaub ich weiß jetzt warum. Ich hab Leerzeilen hinzugefügt, und zwar sieht die Zeile dann aus:

Code: Alles auswählen

if [ $h != 2 ]; then
Zuletzt geändert von pangu am 31.10.2012 18:48:41, insgesamt 1-mal geändert.
Man gibt Geld aus, das man nicht hat, um damit Dinge zu kaufen, die man nicht braucht, um damit Leute zu beeindrucken, die man nicht mag.

wanne
Moderator
Beiträge: 7553
Registriert: 24.05.2010 12:39:42

Re: While Anweisung verwenden in Schleife?

Beitrag von wanne » 31.10.2012 18:46:00

Code: Alles auswählen

if [ ! "$h" = "2" ]
  then echo "Jetzt bin ich bei $i"
fi
oder kurz un schön

Code: Alles auswählen

[ $h -ne 2 ] && echo "Jetzt bin ich bei $i"
Anmerkungen:
= und != vergleicht stings -eq und -ne integers.
Leerzeichen beachten!
Zuletzt geändert von wanne am 31.10.2012 18:50:05, insgesamt 1-mal geändert.
rot: Moderator wanne spricht, default: User wanne spricht.

Benutzeravatar
pangu
Beiträge: 1400
Registriert: 15.11.2011 20:50:52
Lizenz eigener Beiträge: GNU General Public License
Wohnort: /proc/1

Re: While Anweisung verwenden in Schleife?

Beitrag von pangu » 31.10.2012 18:49:28

wanne, danke! haben wohl zeitgleich geschrieben (bzw. du warst schneller :-) ) also kann ich dieses semikolon und then am Ende immer weglassen oder hast du es quasi nur in die nächste Zeile mitaufgenommen? Wie verhält sich das hier mit dem Semikolon, ich versteh das nicht ganz. Das \ verstehe ich, damit wird quasi aus optischen oder stilistischen Gründen in der nächsten Zeile weitergeschrieben. Aber das Semikolon hier, was bewirkt es?
Man gibt Geld aus, das man nicht hat, um damit Dinge zu kaufen, die man nicht braucht, um damit Leute zu beeindrucken, die man nicht mag.

wanne
Moderator
Beiträge: 7553
Registriert: 24.05.2010 12:39:42

Re: While Anweisung verwenden in Schleife?

Beitrag von wanne » 31.10.2012 18:51:43

Ein statement in der bash wird mit Zeilenumbruch oder ; beendet. (oder ist dhier ein logisches oder)
rot: Moderator wanne spricht, default: User wanne spricht.

Benutzeravatar
pangu
Beiträge: 1400
Registriert: 15.11.2011 20:50:52
Lizenz eigener Beiträge: GNU General Public License
Wohnort: /proc/1

Re: While Anweisung verwenden in Schleife?

Beitrag von pangu » 31.10.2012 18:56:01

danke dir (auch für den Hinweis mit dem Unterschied zu string/number
Man gibt Geld aus, das man nicht hat, um damit Dinge zu kaufen, die man nicht braucht, um damit Leute zu beeindrucken, die man nicht mag.

wanne
Moderator
Beiträge: 7553
Registriert: 24.05.2010 12:39:42

Re: While Anweisung verwenden in Schleife?

Beitrag von wanne » 31.10.2012 18:59:10

rot: Moderator wanne spricht, default: User wanne spricht.

Benutzeravatar
pangu
Beiträge: 1400
Registriert: 15.11.2011 20:50:52
Lizenz eigener Beiträge: GNU General Public License
Wohnort: /proc/1

Re: While Anweisung verwenden in Schleife?

Beitrag von pangu » 31.10.2012 19:03:47

:hail: :THX:
Man gibt Geld aus, das man nicht hat, um damit Dinge zu kaufen, die man nicht braucht, um damit Leute zu beeindrucken, die man nicht mag.

Benutzeravatar
goeb
Beiträge: 348
Registriert: 26.08.2006 18:12:08
Lizenz eigener Beiträge: MIT Lizenz

Re: While Anweisung verwenden in Schleife?

Beitrag von goeb » 31.10.2012 19:56:26

Und noch ein Link: http://wiki.bash-hackers.org/commands/classictest

Und noch als Ergänzung:
wanne hat geschrieben:Ein statement in der bash wird mit Zeilenumbruch oder ; beendet. (oder ist dhier ein logisches oder)
Oder mit &, nur dass es dann im Hintergrund ausgeführt wird (aber prinzipiell ist & anstelle des Semikolon möglich, z.B. { echo xyz & } statt { echo xyz ; }).

Benutzeravatar
r900
Beiträge: 1053
Registriert: 09.10.2011 20:06:11
Lizenz eigener Beiträge: GNU Free Documentation License
Wohnort: Stockholm

Re: While Anweisung verwenden in Schleife?

Beitrag von r900 » 31.10.2012 20:09:15

wanne hat geschrieben:Hier nochmal ein schöner Link:
http://www.tldp.org/LDP/abs/html/comparison-ops.html
Ihr seid doch internetsüchtig.. die man page von "test" tut es hier auch :wink:

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: While Anweisung verwenden in Schleife?

Beitrag von Cae » 31.10.2012 20:13:23

r900 hat geschrieben:
wanne hat geschrieben:Hier nochmal ein schöner Link:
http://www.tldp.org/LDP/abs/html/comparison-ops.html
Ihr seid doch internetsüchtig.. die man page von "test" tut es hier auch :wink:
… die es wiederum auch im Netz [1] gibt. ;)

Gruß Cae

[1] http://manpages.debian.net/cgi-bin/man. ... &locale=en
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

Antworten