While Schleife

F

fsking

Eroberer
Hi,
ich bin gerade dabei etwas bash zu lerne, ich versuche gerade eine while schleife zu testen, leider bekomme ich sie nicht zum funktionieren, hier erstmal der code:
Code:
#!/bin/bash
test=3;
ende=6;
while [ $test -gt 2 ]; do
echo "das ist ein test"
counter=1;
let "counter += 1"
if [ counter -a ende ]; then
	let "test=1";
fi
done;
ich hab mir das so geacht, die while schleife läuft solange ducrh, bis die Variable counter auf sechs ist, dei variable wird ja bei jedem durchlauf um eins erhöht, leider läuft die schleife nur einmal ducrh, und dann ist schluss!

jemand ne ahnung, was ich daran verändern muss?

vielen dank schonmal im vorraus!

lg,
fsking
 
Hi,

if [ counter -a ende ];
ist nicht das was du hier willst. Ich denke du willst:
Code:
if [ counter -eq ende ];

Die Option -a steht fuer "and", d.h. du testest ob die Ausdruecke '3' und '6' wahr sind, was der Fall ist, weil keiner davon 0 ist. Ergo wird beim ersten Durchlauf test auf 1 gesetzt, und die Schleife wird abgebrochen.

edit:
Mhh, if [ 0 ]; ist auch ein wahrer Ausdruck, keine Ahnung warum. Also vergiss das mit der 0, aber der Rest sollte stimmen. ;)

mfg,
bytepool
 
Zuletzt bearbeitet:
@bytepool: vielen dank! das funktioniert, musste den code auch so noch etwas umstellen, damit es klappt! wo bekommt ich denn diese abkürzungen wie -eq und -gt her? im Advanced Bash-Scripting Guide habe ich bis jetzt keine Erklärungen dazu gefunden, kann aber auch sein, ich habs einfach überlsen!

lg,
fsking
 
'man bash' und 'man test'
man bash war klar, aber man test kannte ich bis jetzt noch nicht!

vielen dank!

lg,
fabi

EDIT:
jetzt hab ich noch ne frage, und zwar ist es nicht möglich if else anweisungen zu verschachteln?
ich bekomme immer eine Fehlermeldung, wenn ich zweimal else verwende, ich weiß das switch+case sauberer ist, würde aber trotzdem gerne wissen, wie das funktioniert, hier der Code :
Code:
#!/bin/bash
test=3;
ende=6;
counter=1;

while [ "$test" -gt 2 ]; do
echo "das ist ein test"
let "counter += 1"
if [ "$counter" -eq "$ende" ]; then
	let "test=1";
	if [$test -eq 1]; then
		echo "was los?"
	fi
	else
		echo"Nix!"
	fi
else
	echo "Test ist noch nicht vorbei!"
fi
done;

Ich erhalte diese Meldung:
./test.sh: line 17: syntax error near unexpected token `else'
./test.sh: line 17: `else'
 
Zuletzt bearbeitet:
Hallo

Es gibt bei if nur ein else.
Hier der Auszug der Manpage zur bash
if list; then list; [ elif list; then list; ] ... [ else list; ] fi
The if list is executed. If its exit status is zero, the then list is executed. Otherwise, each elif
list is executed in turn, and if its exit status is zero, the corresponding then list is executed and the
command completes. Otherwise, the else list is executed, if present. The exit status is the exit status
of the last command executed, or zero if no condition tested true.

Gruß Wolfgang
 

Ähnliche Themen

continue in Schleife einbauen

verzeichniss suche funktioniert nicht

If Schleife

Escaping-Problem

Problem mit HSPA+ Modem Huawei E353 - Installation unmöglich?

Zurück
Oben