Problem mit Vergleich von negativen Zahlen

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von VuuRWerK, 01.03.2006.

  1. #1 VuuRWerK, 01.03.2006
    VuuRWerK

    VuuRWerK Bin fleißig dabei :)

    Dabei seit:
    01.03.2006
    Beiträge:
    47
    Zustimmungen:
    0
    Ort:
    Dresden
    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 ;)
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    ...sollte

    Code:
    zahl2=$zahl
    
    sein.

    Gruss, Xanti
     
  4. #3 VuuRWerK, 01.03.2006
    VuuRWerK

    VuuRWerK Bin fleißig dabei :)

    Dabei seit:
    01.03.2006
    Beiträge:
    47
    Zustimmungen:
    0
    Ort:
    Dresden
    Ups, sorry mein fehler, hatte es vorher mal zum testen so gemacht.

    Das Problem mit den negativen Zahlen ist allerdings noch ?(

    Gut Schuß
    VuuRWerK
     
  5. Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    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...
     
  6. #5 VuuRWerK, 01.03.2006
    Zuletzt bearbeitet: 01.03.2006
    VuuRWerK

    VuuRWerK Bin fleißig dabei :)

    Dabei seit:
    01.03.2006
    Beiträge:
    47
    Zustimmungen:
    0
    Ort:
    Dresden
    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
     
  7. #6 Wolfgang, 01.03.2006
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    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

    Wenn in $1 eine negative Zahl steht, dann wirkt dein shift nicht so wie du denkst. ;)

    HTH
    Gruß Wolfgang
     
  8. #7 Xanti, 01.03.2006
    Zuletzt bearbeitet: 01.03.2006
    Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    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
      ...
    
     
  9. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  10. #8 VuuRWerK, 01.03.2006
    VuuRWerK

    VuuRWerK Bin fleißig dabei :)

    Dabei seit:
    01.03.2006
    Beiträge:
    47
    Zustimmungen:
    0
    Ort:
    Dresden
    @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 ;)
     
  11. Xanti

    Xanti Mouse Organist

    Dabei seit:
    05.09.2004
    Beiträge:
    1.855
    Zustimmungen:
    0
    Ich musste halt zum Testen meine Shebang an mein System anpassen. Also einfach wieder zurücksetzen...
     
Thema:

Problem mit Vergleich von negativen Zahlen

Die Seite wird geladen...

Problem mit Vergleich von negativen Zahlen - Ähnliche Themen

  1. kleines vergleichsproblem

    kleines vergleichsproblem: Hallo Ich möchte eine Liste mit Dateinamen mit einem Ordnerinhalt vergleichen und die Dateien, die sich nicht im Ordner befinden in eine logdatei...
  2. Programmieren nach Flussdiagramm - Problem bei Ordnerstruktur vergleich

    Programmieren nach Flussdiagramm - Problem bei Ordnerstruktur vergleich: Hallo Zusammen Ich bin hier neu und muss schon von beginn an sagen, dass ich ein ziemlicher Anfänger bin was das Scripten an geht. Hatte mal...
  3. JavaScript problem mit vergleich

    JavaScript problem mit vergleich: Hallo, ich habe ein Forumular wo ein Datum eingetragen werden soll (in der Form YYYY-MM-DD). Jetzt mömchte ich die eingabe Überprüfen und habe...
  4. Virtualboxproblem

    Virtualboxproblem: Hallo Folgnedes Problem: Ich kann ohne Probleme In Debian-Sid, 64Bit und virtualbox-dkms Unixoide installieren, wenn es sich um eine...
  5. grub-pc Probleme bei upgrade

    grub-pc Probleme bei upgrade: Hallo, ich habe beim dist-upgrade folgendes Problem: ---------- Nach dieser Operation werden 0 B Plattenplatz zusätzlich benutzt. Trigger für...