ubuntuusers.de

If $variable = "ganzer satz"

Status: Gelöst | Ubuntu-Version: Kubuntu 9.10 (Karmic Koala)
Antworten |

Budada_Bubladend

Avatar von Budada_Bubladend

Anmeldungsdatum:
13. Dezember 2009

Beiträge: 812

Hallo Linux - Gemeinde!

Ich habe eine (vermutlich) ziemliche Anfänger Frage:

Ich lese gerade ein Buch über Shellscripten und befinde mich noch im Anfängerstadium!

Mit meinem momentanen wissen. wollte ich dann aber dennoch ein kleines script machen! Nachdem ich bereits 3 if - then - else - bedingungen integriert hatte und diese alle funktionierten, bekam ich bei der 4ten folgende fehlermeldung:

Zeile 4: [: Zu viele Argumente.

nach kurzem Überlegen und einem Test viel mir auf, dass ich in der 4 ten if - then - else - bedingung einen satz als bedingung gesetzt hatte! also:

if [ $angabe = "Das ist zu schwierig" ]

nun meine Frage: Wie kann ich machen, dass mein Script einen Satz als eingabe erkennt?

Danke im voraus

Lg BB

Zombie_im_Bademantel

Avatar von Zombie_im_Bademantel

Anmeldungsdatum:
13. April 2005

Beiträge: Zähle...

if [ "$angabe" == "Das ist zu schwierig" ]

sollte das gewünschte Ergebnis bringen.

Budada_Bubladend

(Themenstarter)
Avatar von Budada_Bubladend

Anmeldungsdatum:
13. Dezember 2009

Beiträge: 812

ah vielen dank =)

ausgezeichnet! währe nett wenn mir noch jemand sagen könnte, wie ich es schaffe, dass er wieder zu einem bestimmten Punkt geht, wenn else eintrifft! Also wenn ich exec $0 mache dann kann ich das ganze script von vorne beginnen lassen! Aber wie mache ich es das er zum Beispiel bei diesem Beispiel wieder zu echo geht? Also so, dass der User praktisch gezwungen ist, wasweisich einzugeben?

echo "test"
read test
if [ $test = "wasweisich" ]
then echo "super"
else gehe wieder zu 'echo "test"'

danke auch hierfür im voraus!

Lg BB

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

Und vielleicht auch besser:

if [[ "$angabe" == "Das ist zu schwierig" ]]

Dann benutzt Du die eingebaute Funktion statt des externen Programms "[".
(ja, "[" ist ein Programmname ... siehe: which [ )

Nur aus Kompatibilitätsgründen zur sh-Shell würde man "[" noch verwenden.

track

Budada_Bubladend

(Themenstarter)
Avatar von Budada_Bubladend

Anmeldungsdatum:
13. Dezember 2009

Beiträge: 812

vielen dank! werde es in zukunft anwenden! wenn mir noch einer zu dem oben genannten Problem helfen köntne währe ich sehr dankbar!

Lg BB

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

Budada Bubladend schrieb:

.. wäre nett wenn mir noch jemand sagen könnte, wie ich es schaffe, dass er wieder zu einem bestimmten Punkt geht, wenn else eintrifft!

Ein "goto" findest Du bei der Shell nicht (soweit ich weiss).

Also musst Du eine richtige Schleife bauen: (ein "goto" wäre sowieso kein guter Stil)

echo "test"

until [[ "$test" == "wasweisich" ]] ; do
	read test
	echo "super"
# else gehe wieder zu 'echo "test"'
done

Am besten liest Du das eben mal im Handbuch nach: http://www.fedorawiki.de/index.php/Bash_Benutzerhandbuch_3.2_Start#Schleifen_Konstrukte:_BASH_Kommandos_f.C3.BCr_sich_wiederholende_Aktionen

LG,

track

Budada_Bubladend

(Themenstarter)
Avatar von Budada_Bubladend

Anmeldungsdatum:
13. Dezember 2009

Beiträge: 812

Am besten liest Du das eben mal im Handbuch nach: http://www.fedorawiki.de/index.php/Bash_Benutzerhandbuch_3.2_Start#Schleifen_Konstrukte:_BASH_Kommandos_f.C3.BCr_sich_wiederholende_Aktionen

wenn ich gewusst hätte das es sowas tolles gibt, hätte ich nicht gestört =) naja vielen dank auf jedenfall!

echo "test"

until [[ "$test" == "wasweisich" ]] ; do
	read test
	echo "super"
# else gehe wieder zu 'echo "test"'
done

das hat mir auch sehr geholfen!

und das handbuch wird mir sicherlich noch helfen!!

vielen vielen dank!

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

Zu dem Handbuch noch eine Bemerkung:

Bei den etwas komplexeren Sachen hat die deutsche Ausgabe ziemliche Lücken.
Da sollte man sich doch besser an das (englische) Original halten: http://www.gnu.org/software/bash/manual/bashref.html
oder eben an die man-page: http://linux.die.net/man/1/bash

track

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17604

Wohnort: Berlin

track schrieb:

oder eben an die man-page: http://linux.die.net/man/1/bash

in der sich auch findet:

CONDITIONAL EXPRESSIONS Conditional expressions are used by the [[ compound command and the test and [ builtin commands to test file attributes and perform string and arithmetic comparisons. Expressions are formed from the following unary or binary primaries.

oder auch:

ibmux:~/proj/mini/forum > [ --version
bash: [: Fehlende `]'
ibmux:~/proj/mini/forum > /usr/bin/[ --version
[ (GNU coreutils) 7.4
Copyright © 2009 Free Software Foundation, Inc.
Lizenz GPLv3+: GNU GPL Version 3 oder höher <http://gnu.org/licenses/gpl.html>
Dies ist freie Software: Sie können sie ändern und weitergeben.
Es gibt keinerlei Garantien, soweit wie es das Gesetz erlaubt.

Geschrieben von Kevin Braunsdorf und Matthew Bradburn.

Budada_Bubladend

(Themenstarter)
Avatar von Budada_Bubladend

Anmeldungsdatum:
13. Dezember 2009

Beiträge: 812

Da sollte man sich doch besser an das (englische) Original halten

alles klar! werd ich tun =) nochmals danke für die hilfe!

 ibmux:~/proj/mini/forum > [ --version
bash: [: Fehlende `]'
ibmux:~/proj/mini/forum > /usr/bin/[ --version
[ (GNU coreutils) 7.4
Copyright © 2009 Free Software Foundation, Inc.
Lizenz GPLv3+: GNU GPL Version 3 oder höher <http://gnu.org/licenses/gpl.html>
Dies ist freie Software: Sie können sie ändern und weitergeben.
Es gibt keinerlei Garantien, soweit wie es das Gesetz erlaubt.

Geschrieben von Kevin Braunsdorf und Matthew Bradburn.

mercie beaucoup auch hierführ!

Lg BB

Hello_World

Anmeldungsdatum:
13. Juni 2006

Beiträge: 3620

track schrieb:

Und vielleicht auch besser:

if [[ "$angabe" == "Das ist zu schwierig" ]]

Dann benutzt Du die eingebaute Funktion statt des externen Programms "[".
(ja, "[" ist ein Programmname ... siehe: which [ )

Unsinn, [ ist in praktisch allen Shells ein Builtin, unter anderem auch in bash und dash. Die Vorteile von [[ sind ganz andere.

Budada_Bubladend

(Themenstarter)
Avatar von Budada_Bubladend

Anmeldungsdatum:
13. Dezember 2009

Beiträge: 812

Unsinn, [ ist in praktisch allen Shells ein Builtin, unter anderem auch in bash und dash. Die Vorteile von [[ sind ganz andere.

hiermit erübrigt sich meine Frage.. 😀

track

Avatar von track

Anmeldungsdatum:
26. Juni 2008

Beiträge: 7174

Wohnort: Wolfen (S-A)

user unknown schrieb:

ibmux:~/proj/mini/forum > [ --version
bash: [: Fehlende `]'
ibmux:~/proj/mini/forum > /usr/bin/[ --version
[ (GNU coreutils) 7.4
... 

Tatsache ! - der Frage war ich so genau noch gar nicht nachgegegangen.
Mir war nur klar, dass es eine /usr/bin/[ gibt, aber eine /usr/bin/[[ definitiv nicht.

Und dass die "[[" die vielseitigere Funktion ist.

Dass die ''bash'' aber tatsächlich ihre interne "["-Funktion verwendet war mir entgangen.

So lerne ich auch noch dazu ... 😀

track

p.s.: übrigens habe ich heute endlich mal meine Linksammlung auf meine Seite track gestellt.

Antworten |