Fakultätsschleife

Danke Wolfgang! Jetzt funktioniert es!

Wahrscheinlich bin ich nicht darauf gekommen, weil ich erstens noch nie mit Funktionen in der Bash gearbeitet hab und zweitens ungern mit so vielen Klammern wie in Zeile 24 rechne :D

Zum besseren Verständnis hier nochmal das komplette Skript:

PHP:
#!/bin/bash
# Variablen initialisieren

declare -i zahl1=$1
declare -i zahl2=$2
declare -i fakultaet1=1
declare -i fakultaet2=1

# Wenn $1<$2, dann von=$1 und bis=$2
if [ $zahl1 -lt $zahl2 ]; then
	declare -i von=$zahl1
	declare -i bis=$zahl2
# Wenn $1<$2, dann von=$2 und bis=$1
elif [ $zahl1 -gt $zahl2 ]; then
	declare -i von=$zahl2
	declare -i bis=$zahl1
fi

# Funktion fuer Fakultaet definieren:
function fak() {
	if [ $1 -eq 1 ]; then
		echo 1;
	else
		echo $(($1 * $(fak $(($1 - 1)))))
	fi
}

# Ueberpruefen, wie viele Argumente uebergeben wurden
case $# in
	0)
		# Es gibt KEIN Argument ==> Fehlermeldung ausgeben
		echo "Sie duerfen nur eine oder zwei Zahlen als Parameter eingeben!";;
	1)
		# Es gibt EIN Argument ==> Fakultaet von $1 berechnen und ausgeben
		while [ $zahl1 -gt 1 ]; do
			fakultaet1=$fakultaet1*$zahl1
			zahl1=$zahl1-1
		done
		echo "Fakultaet von" $1 "=" $fakultaet1;;
	2)
		# Es gibt ZWEI Argumente ==> Schleife mit allen Fakultaeten von $1 bis $2 berechnen und ausgeben
		while [ $von -le $bis ]; do
			fak $von
			von=$von+1
		done;;
	*)
		echo "Sie duerfen nur eine oder zwei Zahlen als Parameter eingeben!";;
esac

Jo, ne is klar...
Das da oben funktioniert bei dir?
Das brauch ich garnicht starten, um zu wissen, dass es nicht in der bash rennt.
sowas hier meine ich:

Code:
von=0;
von=$von+1
echo $von
0+1
Iteration oder andere Rechenoperationen in der bash:
Code:
v=1;
# short
while [ $v -lt 10 ];
do
echo $((v++));
done
# long
A=0
while [ $A -lt 10 ];
do 
echo $A;
A=$((A + 1 ));
# oder
((A++));
done

Gruß Wolfgang
 
hat mich auch zuerst überrascht, dass das funktioniert. liegt wohl an dem "declare -i" statement, das der bash mitteilt, dass es die variable als integer behandeln soll.
 
Genau, wenn man der Bash explizit sagt, dass man mit Zahlen (in diesem Fall integer) programmiert, dann kann man so rechnen. Es gibt auch andere Möglichkeiten mit der Bash zu rechnen, aber die finde ich am wenigsten umständlich.
 
Also meine bash:
wolle@Nietzsche:/tmp
declare -i a=1
echo $a;
a=$a+1;
echo $a
1
1+1

Aber wenn es bei dir geht, dann nehm ich alles zurück.
Ist sicher nicht POSIX.

Gruß Wolfgang
 

Ähnliche Themen

Switche abfragen über Script

Skript soll nicht doppelt laufen... kill pkill pid cron

script sshpass

Verschlüsseltes Backup-Script mit rsync

Grafische Anzeige der Temperatur

Zurück
Oben