ubuntuusers.de

Kurze Shell Frage (if)

Status: Ungelöst | Ubuntu-Version: Ubuntu 10.04 (Lucid Lynx)
Antworten |

Firefox64

Anmeldungsdatum:
4. August 2010

Beiträge: 23

Tag zusammen!

Ich hab mich durch unzählige Forenbeiträge und TuT´s gewühlt komme aber einfach nicht weiter...

Folgender Code:

clear

echo "Taschenrechner"
echo "=============="
echo ""
echo "Möchten Sie 1. Addieren oder 2. Subtrahieren?" 

read auswahl

if $auswahl==1
then
{

	echo "Dieser Rechner kann zwei ganze Zahlen Addiren"
	echo "Geben Sie die zu Addierenden Zahlen ein" 

	echo "Geben Sie ein ersten Wert ein:"
	read z1
	echo "Geben sie den zwiten Wert ein" 
	read z2

	erg=`expr $z1 + $z2`

	echo "Das Ergebnis ist $erg"
}
fi
if $auswahl==2
then
{
	echo "Dieser Rechner kann zwei ganze Zahlen Subtrahieren"
	echo "Geben Sie den Wert ein:"
	read z1
	echo "Was wollen Sie abziehen?"
	read z2

	erg=`expr $z1 - $z2`

	echo "Das Ergebnis ist $erg"	
}
fi

Das Problem liegt glaube ich ihrgent wo in der if verzweigung...

Ich habe schon einige Programier erfahrungen mit C und wollte mich jetzt mal an die Script-Spachen wagen^^

Hoffe ihr könnt mir helfen...

mfg FF64

John_W

Anmeldungsdatum:
10. Juli 2010

Beiträge: 571

Du musst test ("[" und "]") benutzen:

 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
clear

echo "Taschenrechner"
echo "=============="
echo ""
echo "Möchten Sie 1. Addieren oder 2. Subtrahieren?" 

read auswahl

if [ "$auswahl" -eq 1 ]
then
{

	echo "Dieser Rechner kann zwei ganze Zahlen Addiren"
	echo "Geben Sie die zu Addierenden Zahlen ein" 

	echo "Geben Sie ein ersten Wert ein:"
	read z1
	echo "Geben sie den zweiten Wert ein" 
	read z2

	erg=`expr $z1 + $z2`

	echo "Das Ergebnis ist $(($z1 + $z2))"
}
elif [ "$auswahl" -eq 2 ]
then
{
	echo "Dieser Rechner kann zwei ganze Zahlen Subtrahieren"
	echo "Geben Sie den Wert ein:"
	read z1
	echo "Was wollen Sie abziehen?"
	read z2

	echo "Das Ergebnis ist $(($z1 - $z2))"
}
fi

Firefox64

(Themenstarter)

Anmeldungsdatum:
4. August 2010

Beiträge: 23

ok danke jetzt klapt es^^

was macht das -eq genau???

Hello_World

Anmeldungsdatum:
13. Juni 2006

Beiträge: 3620

Firefox64 schrieb:

Ich habe schon einige Programier erfahrungen mit C und wollte mich jetzt mal an die Script-Spachen wagen^^

Dann würde ich dringend empfehlen, von Shell-Scripten Abstand zu nehmen und eine vernünftige Sprache zu wählen; Shell-Scripte sind sehr beschränkt in ihren Möglichkeiten und dazu noch kompliziert. Die üblichen Verdächtigen sind Python, Ruby und Perl.

agaida

Avatar von agaida

Anmeldungsdatum:
24. Februar 2010

Beiträge: 3348

Wohnort: Bielefeld

Was der Name aussagt: -eq = equal

Edit: [ $variable=="1" ] sollte auch gehen.

Firefox64

(Themenstarter)

Anmeldungsdatum:
4. August 2010

Beiträge: 23

Hello World schrieb:

Firefox64 schrieb:

Ich habe schon einige Programier erfahrungen mit C und wollte mich jetzt mal an die Script-Spachen wagen^^

Dann würde ich dringend empfehlen, von Shell-Scripten Abstand zu nehmen und eine vernünftige Sprache zu wählen; Shell-Scripte sind sehr beschränkt in ihren Möglichkeiten und dazu noch kompliziert. Die üblichen Verdächtigen sind Python, Ruby und Perl.

Jo muss man mal gucken... Ihrgent welche Tipps womit man anfangen könnte?

Antiqua Team-Icon

Avatar von Antiqua

Anmeldungsdatum:
30. Dezember 2008

Beiträge: 4534

man könnte das auch (meiner Meinung nach) schöner mit case lösen:

 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
#! /bin/bash

clear

echo "Taschenrechner"
echo "=============="
echo ""
echo "Möchten Sie 1. Addieren oder 2. Subtrahieren?" 

read auswahl

case "$auswahl" in
    # fängt die Eins ab
    '1')
	echo "Dieser Rechner kann zwei ganze Zahlen addieren"
	echo "Geben Sie die zu addierenden Zahlen ein" 

	echo "Geben Sie ein ersten Wert ein:"
	    read z1
	echo "Geben sie den zweiten Wert ein" 
	    read z2
	    erg=`expr $z1 + $z2`

	echo "Das Ergebnis ist $erg"
    ;;
    # fängt die 2 ab
    '2')
	echo "Dieser Rechner kann zwei ganze Zahlen Subtrahieren"
	echo "Geben Sie den Wert ein:"
	    read z1
	echo "Was wollen Sie abziehen?"
	    read z2
	    erg=`expr $z1 - $z2`

	echo "Das Ergebnis ist $erg"	
    ;;

    # fängt alle anderen Eingaben ab
    *)
        echo "bitte Auswählen durch drücken von"
        echo "1 (Eins) oder 2 (Zwei)"
esac

Hello_World

Anmeldungsdatum:
13. Juni 2006

Beiträge: 3620

Da gibt es ein Tutorial für Python 3.1 und dort eines für Python 2.7. Python 3 ist die Zukunft, aber die meisten derzeit vorhandenen Programme, Bibliotheken und Frameworks verwenden noch Python 2. Es ist aber letztlich nicht so wichtig, welche Version man nimmt, da die Unterschiede nicht sehr groß sind.

Firefox64

(Themenstarter)

Anmeldungsdatum:
4. August 2010

Beiträge: 23

danke!

Werds mir mal näher ansehen!

tulpi

Anmeldungsdatum:
26. April 2007

Beiträge: 100

erg=`expr $z1 + $z2`
erg=$(expr $z1 + $z2)

Muss man die Finger nicht so verbiegen 😬

John_W

Anmeldungsdatum:
10. Juli 2010

Beiträge: 571

Bash hat ein Builtin, das sollte genutzt werden. Insbesondere in Schleifen macht sich expr in der Laufzeit bemerkbar; expr am Bestem immer meiden, das ist ein Tool für mini-Shells ohne große Funktionalitäten.

tulpi

Anmeldungsdatum:
26. April 2007

Beiträge: 100

John W schrieb:

Bash hat ein Builtin, das sollte genutzt werden. Insbesondere in Schleifen macht sich expr in der Laufzeit bemerkbar; expr am Bestem immer meiden, das ist ein Tool für mini-Shells ohne große Funktionalitäten.

z=1;b=2;echo $(( $z + $b ))

John_W

Anmeldungsdatum:
10. Juli 2010

Beiträge: 571

Hatte ich doch schon gepostet (Zeile 22 hatte ich vergessen rauszunehmen...).

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17622

Wohnort: Berlin

Man kann das Skript etwa halbieren, weil beide Äste fast das gl. machen: einen 1. und 2. Wert erfragen, und diese zu einer Rechnung verknüpfen, die ausgeführt wird.

#!/bin/bash

declare -a nam
declare -a op
nam=("foo" "addieren" "subtrahieren")
op=('x' '+' '-')

echo -e "Taschenrechner\n========\nMöchten Sie 1. ${nam[1]} oder 2. ${nam[2]}?" 
read x

echo "Dieser Rechner kann zwei ganze Zahlen "${nam[$x]}
echo "Geben Sie die zu "${nam[$x]]}"nden Zahlen ein" 
echo "Geben Sie ein ersten Wert ein:"
read a
if (( $x == 1 )) 
then 
	echo "Geben sie den zweiten Wert ein" 
elif (( $x == 2 ))  
then
	echo "Was wollen Sie abziehen?"
fi
read b
echo "Das Ergebnis ist" $(($a ${op[$x]} $b))

Eleganter wäre es vielleicht, je nach $x == 1 oder 2 eine Funktion aufzurufen:

getAndCalc ("addieren", "Geben sie den zweiten Wert ein" "+")
# oder 
getAndCalc ("subtrahieren", "Was wollen Sie abziehen?" "-")

Nennt sich das DRY-Principle.

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17622

Wohnort: Berlin

Hello World schrieb:

Dann würde ich dringend empfehlen, von Shell-Scripten Abstand zu nehmen und eine vernünftige Sprache zu wählen; Shell-Scripte sind sehr beschränkt in ihren Möglichkeiten und dazu noch kompliziert. Die üblichen Verdächtigen sind Python, Ruby und Perl.

Shellscripte sind die Linugua-Franca unter Linux. Für viele kl. Aufgaben ist das genau das richtige. Dringende Empfehlungen halte ich da für übertriebenen Alarmismus.

Antworten |