Problem mit Vergleich von negativen Zahlen

V

VuuRWerK

Bin fleißig dabei :)
HiHo Community,

mit meinem ersten Post hab ich auch gleich ein Problem, naja wie so oft :)

Zu meinem Studium an einer FHS zum Softwaretechnologen gehört u.a. die Lehre der ShellSkript-Programmierung. Wir haben den Auftrag Schleifen zu erlernen. Um kurz meine Aufgabe zu erläutern, wir sollen eine Skript schreiben welches aus einer Liste von zahlen die größte Zahl ausgibt. Soweit so gut. Hab mich für die Verwendung von for var in Liste entschieden und möchte damit nun die Liste durchgehen und die größte Zahl herraussuchen.

Um es einwenig zu erleichtern wie weit ich momentan bin, hier mein kleines Skript:

Code:
#! /bin/bash

# Shellscript zum feststellen der größten Zahl aus einer Liste.

zahl2=0

for zahl in $*
do
	shift $1
	echo $1 # Debug

	if [ $1 -gt $zahl ]
	then
		echo "if [ $1 -gt $zahl1 ]" # Debug
		
		$zahl2:=$zahl

		echo $zahl # Debug
	fi
done

echo "Das Maximum dieser Liste ist $zahl"

Aufruf: maximum 1 5 -80 456 500

Problem ist nun das es bei negativen zahlen irgentwie stehen bleibt. Wobei es weiter durchläuft aber eben mit einer leeren Variable.

Meine Frage nun: Wie kann ich negative Zahlen vergleichen? Ich denk mal das es nur daran liegen kann. Lass mich aber auch gern eines besseren belehren!

Ich hoffe mich verständlich ausgedrückt zu haben? Sonst bitte genau fragen stellen was Ihr wissen wollt.

Gut Schuß
VuuRWerK ;)
 
Ups, sorry mein fehler, hatte es vorher mal zum testen so gemacht.

Das Problem mit den negativen Zahlen ist allerdings noch ?(

Gut Schuß
VuuRWerK
 
Code:
[~]$ ./maximum.sh 1 5 -80 456 500
5
if [ 5 -gt  ]
1
5
5
if [ 5 -gt  ]
-80
5
5
Das Maximum dieser Liste ist 500

Funktioniert bei mir. Die fehlerhafte if-Ausgabe liegt an der nicht gesetzten Variable zahl1. Ist wahrscheinlich ein Schreibfehler, tut aber nix an der Funktionalität...
 
Jap so funktioniert es auch, hab vllt einen falschen Aufruf aufgeschrieben, denn wenn Du die 500 mit 456 tauschst ist angeblich das maximum 456?

Ich vermute eben das es mit dem vergleich der negativen zahl zusammen hängt?

[EDIT]
Ich hab mal schnell eine log gemacht da ich zahlen aus einer datei verwende:

~/bin$ maximum `cat numlist`
++ cat numlist
+ maximum 1 23 -234 465 -67878 4567678658 5654645654645 5465656 5645645645 78678 8678 7 -67986 -769679679679679667967 769679679679679679679769679679 547457457 54745 457 5474 457457457 547457457457
23
if [ 23 -gt 1 ]
1
23
23
if [ 23 -gt -234 ]
-234
23
23
if [ 23 -gt -67878 ]
-67878
23
23
23
23
23
23
23
if [ 23 -gt 7 ]
7
23
if [ 23 -gt -67986 ]
-67986
23
23
23
23
23
23
23
23
Das Maximum dieser Liste ist 547457457457

Warum sieht es so aus das es nach einer negativen Zahl zu der letzten pos. zahl (hier 23) zurückspringt?

-> Entschuldigt bitte die lange zahlenliste, wollt eben für den debug alles ausprobieren.
[/EDIT]

Gut Schuß
VuuRWerK
 
Zuletzt bearbeitet:
Hallo

Code:
[b]
wolle@nietzsche$ a="-3"; b="-2"; if [ $a -gt $b ]; then echo "$a gr $b"; else echo "$b gr $a"; fi[/b]
-2 gr -3


Dein shift $1 ist nicht richtig

shift: shift [n]
The positional parameters from $N+1 ... are renamed to $1 ... If N is
not given, it is assumed to be 1.
Wenn in $1 eine negative Zahl steht, dann wirkt dein shift nicht so wie du denkst. ;)

HTH
Gruß Wolfgang
 
Code:
#! /usr/local/bin/bash

# Shellscript zum feststellen der größten Zahl aus einer Liste.

max=0

for zahl in $*
do
        echo $zahl # Debug

        if [ $zahl -gt $max ]
        then
                max=$zahl
                echo $zahl # Debug
        fi
done

echo "Das Maximum dieser Liste ist $max"

edit: Wolfgang hats bereits gesagt, ist shift überflüssig und falsch benutzt. Was gehen würde, wäre

Code:
while [ $1 ]; do
  shift
  ...
 
Zuletzt bearbeitet:
@xanti:

Dein Skript gibt folgenden Fehler aus:

~/bin$ maximum2 1 2 82 -456 500
+ maximum2 1 2 82 -456 500
: bad interpreter: Datei oder Verzeichnis nicht gefunden

Muss da jetzt passen, kann mit der Fehlermeldung nix anfangen, was bedeutet es?

[EDIT]Huch wo ist es denn hin?[/EDIT]

@Wolfgang:

OK, das mit dem shift bei negativen zahlen wusst ich nicht, der Prof gab uns nur die Tipps: shift, $* und #@

Was jetzt #@ bewirkt weiß ich nocht nicht, da ich erstmal ein Skript zum laufen bringen wollte bevor ich weiter forsche :)

Gut Schuß
VuuRWerK ;)
 
VuuRWerK schrieb:
@xanti:

Dein Skript gibt folgenden Fehler aus:

~/bin$ maximum2 1 2 82 -456 500
+ maximum2 1 2 82 -456 500
: bad interpreter: Datei oder Verzeichnis nicht gefunden

Muss da jetzt passen, kann mit der Fehlermeldung nix anfangen, was bedeutet es?
...

Ich musste halt zum Testen meine Shebang an mein System anpassen. Also einfach wieder zurücksetzen...
 

Ähnliche Themen

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

NagiosGrapher 1.7.1 funktioniert nicht

Problem mit Rekursion in Bash / Funktioniert das überhaupt?

Fakultätsschleife

VHOST Problem, Debian Lenny

Zurück
Oben