ERLEDIGT
NEIN
NEIN
ANTWORTEN
13
13
ZUGRIFFE
1262
1262
EMPFEHLEN
-
18.03.10 11:21 #1Corbin 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:
so, das wars soweit, nur bei dem script haben wir ein problem mit den zahlen: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
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
-
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.
-
18.03.10 13:53 #3
- Registriert seit
- Jun 2005
- Beiträge
- 8.169
Hi.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):
Und nicht vergessen zu Quoten!Code bash:1 2 3
if [[ $z1 =~ [0-9] && [^a-zA-Z] ]] ... fi
GrußCode bash:1 2 3
if [[ "$z1" =~ [0-9]+ ]]; then ... fi
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
19.03.10 09:16 #4Corbin 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...
-
19.03.10 10:24 #5
- Registriert seit
- Jun 2005
- Beiträge
- 8.169
Hi.
GrußCode bash:1 2 3
if [[ "$z1" =~ ^[0-9]+$ ]]; then ... fi
If at first you don't succeed, try again. Then quit. No use being a damn fool about it.
-
19.03.10 10:43 #6Corbin Tutorials.de Gastzugang
Danke, habs gelöst!
-
19.03.10 10:47 #7SvenW2000 Tutorials.de Gastzugang
hi @all,
Wir habens
Meine Lösung::
if [[ `echo "$z1" | grep -E ^[[:digit:]]+$` ]]
-
19.03.10 10:48 #8Corbin 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
-
19.03.10 11:26 #9
- 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 zuCode 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.
-
19.03.10 12:41 #10Corbin 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
-
19.03.10 13:50 #11Corbin 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:
-
19.03.10 13:55 #12Corbin 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
-
22.03.10 11:22 #13Corbin 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...
-
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
-
[BASH]
Von Alex Duschek im Forum Sonstige SprachenAntworten: 2Letzter Beitrag: 06.05.10, 15:10 -
PHP - Shell/ Bash - Benutzer wechsel
Von Anubia im Forum Linux & UnixAntworten: 6Letzter Beitrag: 18.07.07, 13:36 -
Shell in Shell ohne Inhalt....
Von Ronin-Jay im Forum JavaAntworten: 0Letzter Beitrag: 17.07.07, 13:07 -
Bash <TAB>
Von kevkev im Forum Linux & UnixAntworten: 6Letzter Beitrag: 18.01.06, 19:05 -
[Shell] Wie Systemlastig ist ein Eggdrop auf einer Shell?
Von cIrCa im Forum Linux & UnixAntworten: 0Letzter Beitrag: 30.04.04, 10:11





Zitieren

Login





