tutorials.de Buch-Aktion 05/2012
ERLEDIGT
NEIN
ANTWORTEN
13
ZUGRIFFE
1262
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    Corbin Tutorials.de Gastzugang
    Hey, alle zusammen!

    ich muss im Moment für mein praktikum (von der schule aus) hier mit shell einen Taschenrechner programmieren, natürlich nur ganz einfach mit den 4 grundrechenarten... die leute hier im betrieb helfen uns nicht, uns ist aber erlaubt das internet zu rate zu ziehen, also vielleicht kann mir einer von euch helfen

    hier das script, und gleich mit das Problem:
    Code :
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    
     #! /bin/bash
     
    clear
     
    antw="ja"
     
    while test $antw == "ja" -o $antw == "j" -o $antw == "Ja" -o $antw == "J" -o $antw == "y" -o $antw == "yes" -o $antw == "Yes" -o $antw == "Y"
    do
     
    echo "Wähle die erste Zahl: "
    read z1
     
    if [[ $z1 =~ [0-9] && [^a-zA-Z] ]]
    then
     
      echo "Nenne die zweite Zahl: "
      read z2
      if [[ $z2 =~ [0-9] ]]
        then
     
     
            echo -n "Wählen sie aus: 1 - Addition, 2 - Subtraktion, 3 - Multiplikation, 4 - Division: "
     
            read rz
            echo ""
     
            case $rz in
                    1 ) erg=`expr $z1 + $z2`
                    echo "Das Ergebnis ist: $erg."
                    ;;
     
                    2 ) erg=`expr $z1 - $z2`
                    echo "Das Ergebnis ist: $erg."
                    ;;
     
                    3 ) erg=`expr $z1 \* $z2`
                    echo "Das Ergebnis ist: $erg."
                    ;;
     
                    4 ) erg=`expr $z1 / $z2`
                        echo "Das Ergebnis ist: $erg."
                    ;;
     
                    * ) echo "Nicht möglich, nur die 4 Grundrechenarten"
                    ;;
     
            esac
     
      else
        echo ""
        echo "Keine Zahl eingegeben!"
        echo ""
      fi
                else
      echo ""
      echo "Keine Zahl eingeben!"
      echo ""
    fi
     
    echo ""
    echo -n "Noch einmal? (ja für noch eine Runde) "
    read antw
            if test -z $antw;
            then
                    echo "Viel Spaß noch"
    exit 1
            else
     
                    echo ""
     
            fi
     
    done
     
    echo ""
    echo "Viel Spaß noch!"
    echo ""
     
    exit 2
    so, das wars soweit, nur bei dem script haben wir ein problem mit den zahlen:

    ich kann bei Zahl eins (nach der programmierung zwar wie erwartet nur zahlen, und keine buchstaben anngeben, aber auch nur immer 1 zahl, was natürlich nicht sinn der aufgabe ist...

    bei dem anderem kann man zwar soviele zahlen wie man will angeben, aber man kann auch zahlen in Verbindung mit Buchstaben als Variable nennen, was ja nicht so sein soll

    Vielleicht könnt ihr uns ja helfen, danke im vorraus
     

  2. #2
    Avatar von Vereth
    Vereth Vereth ist offline Mitglied Brokat
    Registriert seit
    Nov 2009
    Ort
    Dortmund
    Beiträge
    372
    Das Pattern, auf das du prüfen musst, lautet:
    +[0-9]
    Studiere mal die Doku zum Bash Pattern Matching. Sie ist zwar in Englisch, aber mit der Sprache solltest du dich sowieso vertraut machen.
     
    Vielen Dank für die Nutzung des Bewerten- und Danke-Buttons

    Wenn man sieht, dass man einen anderen glücklich gemacht hat, ist die Welt um zwei glückliche Menschen reicher.

  3. #3
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.169
    Hi.
    Zitat Zitat von Vereth Beitrag anzeigen
    Das Pattern, auf das du prüfen musst, lautet:
    +[0-9]
    Studiere mal die Doku zum Bash Pattern Matching. Sie ist zwar in Englisch, aber mit der Sprache solltest du dich sowieso vertraut machen.
    Der =~ Operator arbeitet aber mit erweiterten regulären Ausdrücken. Da mußte man dann [0-9]+ verwenden. Siehe "man bash" bzw. "man 3 regex"

    Außerdem ist die zweite Bedingung des if immer wahr (kann man also getrost weglassen):
    Code bash:
    1
    2
    3
    
    if [[ $z1 =~ [0-9] && [^a-zA-Z] ]]
      ...
    fi
    Und nicht vergessen zu Quoten!
    Code bash:
    1
    2
    3
    
    if [[ "$z1" =~ [0-9]+ ]]; then
      ...
    fi
    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  4. #4
    Corbin Tutorials.de Gastzugang
    Danke erstmal für die Antworten!

    Leider ist es bei deinem deep noch möglich, zahlen und Buchstaben gemischt einzugeben, sowas wie 12hgf zum beispiel...

    Also vielleicht hat noch jemand ne Idee, ich google erstmal weiter nach noch mehr möglichkeiten...
     

  5. #5
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.169
    Hi.

    Code bash:
    1
    2
    3
    
    if [[ "$z1" =~ ^[0-9]+$ ]]; then
      ...
    fi
    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  6. #6
    Corbin Tutorials.de Gastzugang
    Danke, habs gelöst!
     

  7. #7
    SvenW2000 Tutorials.de Gastzugang
    hi @all,
    Wir habens

    Meine Lösung::

    if [[ `echo "$z1" | grep -E ^[[:digit:]]+$` ]]
     

  8. #8
    Corbin Tutorials.de Gastzugang
    Sry für den Doppelpost, aber ich hätte noch ne zweite ganz kurze frage, die ich leider auch nicht über google finde:

    Ich habe jetzt noch einfügen müssen, dass man mit dem bisherigen ergebns weiterrechnen kann, das wollte ich mit einer case machen, an sich auczh kein problem, aber in der case gibt es nochmal eine zweite case, und wenn ich diese schließe, dann schließt sich immer meine erste case und das programm geht nicht mehr -.-

    kann mir da vielleicht jemand helfen, wie man die esacs den cases zuordnet?



    echo "Vielleicht stattdessen mit bisherigen Ergebnis weiterrechnen(1)? Oder lieder aufhören (rest)"
    read antw2
    case $antw2 in

    1 ) echo ""
    echo "Geben sie ihre Rechenoperation ein: 1 - Addition, 2 - Subtraktion, 3 - Multiplikation, 4 - Division"
    read rz2
    echo ""
    case §rz2 in
    1 ) echo "Geben sie eine Zahl zum hinzuaddieren ein"
    read z3
    if [[ $z3 = [0-9]* && $z3 != *[a-zA-Z]* ]]
    then
    erg2=`expr $erg + $z3`
    echo "Das Ergebnis ist: $erg2"
    else
    echo "Keine Zahl eingegeben"
    fi
    ;;

    2 ) echo "Geben sie eine Zahl zum abziehen ein"
    read z3
    if [[ $z3 = [0-9]* && $z3 != *[a-zA-Z]* ]]
    then
    erg2=`expr $erg - $z3`
    echo "Das Ergebnis ist: $erg2"
    else
    echo "Keine Zahl eingegeben"
    fi
    ;;

    3 ) echo "Geben Sie eine Zahl zum multiplizieren ein"
    read z3
    if [[ $z3 = [0-9]* && $z3 != *[a-zA-Z]* ]]
    then
    erg2=`expr $erg \* $z3`
    echo "Das Ergebnis ist: $erg2"
    else
    echo "Keine Zahl eingegeben"
    fi
    ;;

    4 ) echo "Geben Sie eine Zahl zum dividieren ein"
    read z3
    if [[ $z3 = [0-9]* && $z3 != *[a-zA-Z]* ]]
    then
    erg2=`expr $erg / $z3`
    echo "Das Ergebnis ist: $erg2"
    else
    echo "Keine Zahl eingegeben"
    fi
    ;;



    * ) echo "Nicht möglich, nur die 4 Grundrechenarten"
    ;;

    esac

    * ) echo ""
    echo "Auf Wiedersehen!"
    echo ""
    exit 1
    ;;

    esac
     

  9. #9
    deepthroat deepthroat ist offline Mitglied Diamant
    tutorials.de Premium-User
    Registriert seit
    Jun 2005
    Beiträge
    8.169
    Hi.

    Du mußt den ersten Fall nur ganz normal mit ;; beenden nachdem die innere case Anweisung beendet ist.

    Und verwende bitte die Code-Tags für deine Codeschnipsel: [bash] if [[ blah ]]; then echo x; fi [/bash] wird zu
    Code bash:
    1
    
     if [[ blah ]]; then echo x; fi

    Gruß
     
    If at first you don't succeed, try again. Then quit. No use being a damn fool about it.

  10. #10
    Corbin Tutorials.de Gastzugang
    Tut mir leid wegen den Code-tags

    Danke für deine hilfe, jetz geht alles ganz gut, wir müssen es jetz nur noch in ner anderen datei speichern, denk mal das kriegen wir schon alleine bzw via google hin, ansonsten melden wir uns nochmal
     

  11. #11
    Corbin Tutorials.de Gastzugang
    Hier nochmal für alle dies intressiert der fertige rechner
    Er speichert jetzt auch die Ergebnisse in einer neuen Datei, ansonsten so wie vorher:

    Code bash:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    
    #! /bin/bash
     
    clear
     
    antw="ja"
     
    while test $antw == "ja" -o $antw == "j" -o $antw == "Ja" -o $antw == "J" -o $antw == "y" -o $antw == "yes" -o $antw == "Yes" -o $antw == "Y"
    do
     
    echo "Wähle die erste Zahl: "
    read z1
     
    if [[ $z1 = [0-9]* && $z1 != *[a-zA-Z]* ]]
    then
     
      echo "Nenne die zweite Zahl: "
      read z2
      if [[ $z2 = [0-9]* && $z1 != *[a-zA-Z]* ]]
        then
     
     
            echo -n "Wählen sie aus: 1 - Addition, 2 - Subtraktion, 3 - Multiplikation, 4 - Division: "
     
            read rz
            echo ""
     
            case $rz in
                    1 ) erg=`expr $z1 + $z2`
                    echo $erg >> Ergebnisse
                    echo "Das Ergebnis ist: $erg."
                    ;;
     
                    2 ) erg=`expr $z1 - $z2`
                    echo $erg >> Ergebnisse
                    echo "Das Ergebnis ist: $erg."
                    ;;
     
                    3 ) erg=`expr $z1 \* $z2`
                    echo >> Ergebnisse
                    echo "Das Ergebnis ist: $erg."
                    ;;
     
                    4 ) erg=`expr $z1 / $z2`
     
                    echo "Das Ergebnis ist: $erg."
                    ;;
     
                    * ) echo "Nicht möglich, nur die 4 Grundrechenarten"
                    ;;
     
            esac
     
      else
        echo ""
        echo "Keine Zahl eingegeben!"
        echo ""
      fi
    else
      echo ""
      echo "Keine Zahl eingeben!"
      echo ""
    fi
     
    echo ""
    echo -n "Noch einmal?"
    read antw
    if $antw;
            then
                    echo ""
                    echo "Auf Wiedersehen"
                    echo ""
                    exit 1
            else
    echo ""
    fi
    done
     
    if test -n $erg;
    then
      echo "Vielleicht stattdessen mit bisherigen Ergebnis weiterrechnen?"
      read antw2
            if test $antw2 == "ja" -o $antw2 == "j" -o $antw2 -o $antw2 == "Ja" -o $antw2 == "J" -o $antw2 == "yes" -o $antw2 == "y";
                    then
     
                                    echo ""
                                    echo "Geben sie ihre Rechenoperation ein: 1 - Addition, 2 - Subtraktion, 3 - Multiplikation, 4 - Division"
                                    read rz2
                                    echo ""
                                    case $rz2 in
                                            "1" ) echo "Geben sie eine Zahl zum hinzuaddieren ein"
                                                read z3
                                                if [[ $z3 = [0-9]* && $z3 != *[a-zA-Z]* ]]
                                                  then
                                                    erg2=`expr $erg + $z3`
                                                    echo >> Ergebnisse
                                                    echo "Das Ergebnis ist: $erg2"
                                                  else
                                                    echo "Keine Zahl eingegeben"
     
                                          fi
                                            ;;
     
                                            "3" ) echo "Geben Sie eine Zahl zum multiplizieren ein"
                                                read z3
                                                if [[ $z3 = [0-9]* && $z3 != *[a-zA-Z]* ]]
                                                  then
                                                    erg2=`expr $erg \* $z3`
                                                    echo >> Ergebnisse
                                                    echo "Das Ergebnis ist: $erg2"
                                                  else
                                                    echo "Keine Zahl eingegeben"
                                                fi
                                            ;;
     
                                            "4" ) echo "Geben Sie eine  Zahl zum dividieren ein"
                                                read z3
                                                if [[ $z3 = [0-9]* && $z3 != *[a-zA-Z]* ]]
                                                  then
                                                    erg2=`expr $erg / $z3`
                                                    echo >> Ergebnisse
                                                    echo "Das Ergebnis ist: $erg2"
                                                  else
                                                    echo "Keine Zahl eingegeben"
                                                fi
                                            ;;
     
                                            * ) echo "Nicht möglich, nur die 4 Grundrechenarten"
                                            ;;
     
                                    esac
     
     
                    else echo ""
                         echo "Auf Wiedersehen!"
                         echo ""
                    exit 2
     
                 fi
     
    else
     
      echo ""
      echo "Auf Wiedersehen"
      echo ""
     
      exit 3
     
    fi
     
     
    echo ""
    echo "Auf Wiedersehen"
    echo ""
    exit 4:
     

  12. #12
    Corbin Tutorials.de Gastzugang
    ups.... punkt 2 übersprungen, da fehlen 10 zeilen
    Code bash:
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    
     
    #! /bin/bash
     
    clear
     
    antw="ja"
     
    while test $antw == "ja" -o $antw == "j" -o $antw == "Ja" -o $antw == "J" -o $antw == "y" -o $antw == "yes" -o $antw == "Yes" -o $antw == "Y"
    do
     
    echo "Wähle die erste Zahl: "
    read z1
     
    if [[ $z1 = [0-9]* && $z1 != *[a-zA-Z]* ]]
    then
     
      echo "Nenne die zweite Zahl: "
      read z2
      if [[ $z2 = [0-9]* && $z1 != *[a-zA-Z]* ]]
        then
     
     
            echo -n "Wählen sie aus: 1 - Addition, 2 - Subtraktion, 3 - Multiplikation, 4 - Division: "
     
            read rz
            echo ""
     
            case $rz in
                    1 ) erg=`expr $z1 + $z2`
                    echo $erg >> Ergebnisse
                    echo "Das Ergebnis ist: $erg."
                    ;;
     
                    2 ) erg=`expr $z1 - $z2`
                    echo $erg >> Ergebnisse
                    echo "Das Ergebnis ist: $erg."
                    ;;
     
                    3 ) erg=`expr $z1 \* $z2`
                    echo $erg >> Ergebnisse
                    echo "Das Ergebnis ist: $erg."
                    ;;
     
                    4 ) erg=`expr $z1 / $z2`
                    echo $erg >> Ergebnisse
                    echo "Das Ergebnis ist: $erg."
                    ;;
     
                    * ) echo "Nicht möglich, nur die 4 Grundrechenarten"
                    ;;
     
            esac
     
      else
        echo ""
        echo "Keine Zahl eingegeben!"
        echo ""
      fi
    else
      echo ""
      echo "Keine Zahl eingeben!"
      echo ""
    fi
     
    echo ""
    echo -n "Noch einmal?"
    read antw
    if $antw;
            then
                    echo ""
                    echo "Auf Wiedersehen"
                    echo ""
                    exit 1
            else
    echo ""
    fi
    done
     
    if test -n $erg;
    then
      echo "Vielleicht stattdessen mit bisherigen Ergebnis weiterrechnen?"
      read antw2
            if test $antw2 == "ja" -o $antw2 == "j" -o $antw2 -o $antw2 == "Ja" -o $antw2 == "J" -o $antw2 == "yes" -o $antw2 == "y";
                    then
     
                                    echo ""
                                    echo "Geben sie ihre Rechenoperation ein: 1 - Addition, 2 - Subtraktion, 3 - Multiplikation, 4 - Division"
                                    read rz2
                                    echo ""
                                    case $rz2 in
                                            "1" ) echo "Geben sie eine Zahl zum hinzuaddieren ein"
                                                read z3
                                                if [[ $z3 = [0-9]* && $z3 != *[a-zA-Z]* ]]
                                                  then
                                                    erg2=`expr $erg + $z3`
                                                    echo $erg >> Ergebnisse
                                                    echo "Das Ergebnis ist: $erg2"
                                                  else
                                                    echo "Keine Zahl eingegeben"
                                                fi
                                            ;;
     
                                            "2" ) echo "Geben sie eine Zahl zum abziehen ein"
                                                read z3
                                                if [[ $z3 = [0-9]* && $z3 != *[a-zA-Z]* ]]
                                                  then
                                                    erg2=`expr $erg - $z3`
                                                    echo $erg >> Ergebnisse
                                                    echo "Das Ergebnis ist: $erg2"
                                                  elo ""
                                                  e
                                                    echo "Keine Zahl eingegeben"
                                                fi
                                            ;;
     
                                            "3" ) echo "Geben Sie eine Zahl zum multiplizieren ein"
                                                read z3
                                                if [[ $z3 = [0-9]* && $z3 != *[a-zA-Z]* ]]
                                                  then
                                                    erg2=`expr $erg \* $z3`
                                                    echo $erg >> Ergebnisse
                                                    echo "Das Ergebnis ist: $erg2"
                                                  else
                                                    echo "Keine Zahl eingegeben"
                                                fi
                                            ;;
     
                                            "4" ) echo "Geben Sie eine  Zahl zum dividieren ein"
                                                read z3
                                                if [[ $z3 = [0-9]* && $z3 != *[a-zA-Z]* ]]
                                                  then
                                                    erg2=`expr $erg / $z3`
                                                    echo $erg >> Ergebnisse
                                                    echo "Das Ergebnis ist: $erg2"
                                                  else
                                                    echo "Keine Zahl eingegeben"
                                                fi
                                            ;;
     
                                            * ) echo "Nicht möglich, nur die 4 Grundrechenarten"
                                            ;;
     
                                    esac
     
     
                    else echo ""
                         echo "Auf Wiedersehen!"
                         echo ""
                    exit 2
     
                 fi
     
    else
     
      echo ""
      echo "Auf Wiedersehen"
      echo ""
     
      exit 3
     
    fi
     
    echo ""
    echo "Auf Wiedersehen"
    echo ""
    exit 4:

    Jetzt müsste es vollständig sein
     

  13. #13
    Corbin Tutorials.de Gastzugang
    Tut mir leid, dass ich euch noch einmal stören muss, aber kann mir einer von euch vielleicht nochmal helfen?

    Ich habe ja jetzt den taschenrechner ganz fertig, das einzige was ich machen muss ist jetzt die Datei, in der alle ergebnisse gescpeichert werden (Ergebnisse) mit einem neuen Script durchsuchen lassen und sowohl die Anzahl der Ergebnisse (Anzahl der Zeilen) als auch eine Auflistung aller Ergebnisse auszugeben...

    Kann mir dabei vielleicht ejamdn helfen, denn ich hab keine ahnung wie ich das machen soll, und sowas wie ein ansatz wär schon echt gut, denn ich weiß nichtmals wie man die datei angibt die durchsucht werden soll, geschweige denn was ich da genau angeben muss...
     

  14. #14
    Avatar von Vereth
    Vereth Vereth ist offline Mitglied Brokat
    Registriert seit
    Nov 2009
    Ort
    Dortmund
    Beiträge
    372
    Kleiner Tip: schau dir mal an, was das Kommando grep macht.
     
    Vielen Dank für die Nutzung des Bewerten- und Danke-Buttons

    Wenn man sieht, dass man einen anderen glücklich gemacht hat, ist die Welt um zwei glückliche Menschen reicher.

Ähnliche Themen

  1. [BASH]
    Von Alex Duschek im Forum Sonstige Sprachen
    Antworten: 2
    Letzter Beitrag: 06.05.10, 15:10
  2. PHP - Shell/ Bash - Benutzer wechsel
    Von Anubia im Forum Linux & Unix
    Antworten: 6
    Letzter Beitrag: 18.07.07, 13:36
  3. Shell in Shell ohne Inhalt....
    Von Ronin-Jay im Forum Java
    Antworten: 0
    Letzter Beitrag: 17.07.07, 13:07
  4. Bash <TAB>
    Von kevkev im Forum Linux & Unix
    Antworten: 6
    Letzter Beitrag: 18.01.06, 19:05
  5. Antworten: 0
    Letzter Beitrag: 30.04.04, 10:11