ubuntuusers.de

Beginner Frage zu Shell Code...

Status: Gelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

Ubunutu_Newbie

Avatar von Ubunutu_Newbie

Anmeldungsdatum:
17. Februar 2008

Beiträge: 37

Wohnort: /home/Trier

Gegeben ist folgendes bash Skipt (myscript.sh)

1
2
3
4
5
6
i=0
while read WORT
do
  echo $WORT|grep a>/dev/null || echo $WORT|grep B>/dev/null ||let i=$i+1
done
echo $i

Das Skript wird wie folgt aufgerufen:

1
ls | /home/notroot/scripts/myscript.sh

und das aktuelle Verzeichnis enthält folgende Dateien:

1
2
3
Abbe Ananas Apfel Apfelsine Asterix
Backen Berg Burg Hacken Halle
Huepfen Obelix Schuler Werbung Barbier

Die Ausgabe müssten doch alle Wörter die das kleine a und das große B enthalten sind ausgegeben werden, oder liege ich da falsch? Wollte das selber mal unter Ubuntu testen, nur funktioniert das nicht bei mir. Deshalb stelle ich mal die Frage hier rein.

Also müsste die Lösung so aussehen:

1
Ananas Backen Berg Burg Barbier

Oder liege ich hier falsch???

b) Wie oft werden die folgenden Statements bei obigem Ablauf des Skriptes ausgeführt?

1
2
3
4
5
15 mal "read WORT"
1 mal "echo $WORT|grep a>/dev/null"
4 mal "echo $WORT|grep B>/dev/null"
___ mal "let i=$i+1"
5 mal "echo $i"

Ich hoffe, dass vielleicht mich jemand mal korrigieren kann, falls ich hier falsch liege. 😀 Da die Aufgabe mir wichtig ist und ich mir auch nicht wirklich sicher bei dieser Aufgabe bin. Danke für eure mühe.

Bilder

cn

Anmeldungsdatum:
6. Juni 2005

Beiträge: 356

Wohnort: Oberösterreich

Also für mich schaut das Skript so aus, also ob $i nur dann erhöht wird, wenn weder a noch B vorkommen, sprich bei

Abbe Apfel Apfelsine Asterix Huepfen Obelix Schuler Werbung

ergibt 8, außer ich hab mich verlesen.

redknight Team-Icon

Moderator & Supporter
Avatar von redknight

Anmeldungsdatum:
30. Oktober 2008

Beiträge: 21846

Wohnort: Lorchhausen im schönen Rheingau

grep zeigt nur Sachen an, die dem Muster entsprechen. Die leitest du nach /dev/null um. Somit kann da - imho - gar nichts bei rauskommen.

deprecated

Avatar von deprecated

Anmeldungsdatum:
21. Dezember 2009

Beiträge: 91

Wohnort: Wien

Ubunutu Newbie schrieb:

Die Ausgabe müssten doch alle Wörter die das kleine a und das große B enthalten sind ausgegeben werden, oder liege ich da falsch?

Ja, du liegst falsch, die Ausgabe wird auf /dev/null umgeleitet.

Oder liege ich hier falsch???

Ja. Die Ausgabe ist 8, weil das Skript die Variable i immer dann erhöht, wenn das Wort weder 'a' noch 'B' enthält.

b) Wie oft werden die folgenden Statements bei obigem Ablauf des Skriptes ausgeführt?

16x (15x true, 1x false), 15x (5x true, 10x false), 10x (2x true, 8x false), 8x und 1x. Die Oder-Verknüpfung || bricht ab, sobald die Bedingung wahr ist.

Ubunutu_Newbie

(Themenstarter)
Avatar von Ubunutu_Newbie

Anmeldungsdatum:
17. Februar 2008

Beiträge: 37

Wohnort: /home/Trier

deprecated schrieb:

Ubunutu Newbie schrieb:

Die Ausgabe müssten doch alle Wörter die das kleine a und das große B enthalten sind ausgegeben werden, oder liege ich da falsch?

Ja, du liegst falsch, die Ausgabe wird auf /dev/null umgeleitet.

Oder liege ich hier falsch???

Ja. Die Ausgabe ist 8, weil das Skript die Variable i immer dann erhöht, wenn das Wort weder 'a' noch 'B' enthält.

b) Wie oft werden die folgenden Statements bei obigem Ablauf des Skriptes ausgeführt?

16x (15x true, 1x false), 15x (5x true, 10x false), 10x (2x true, 8x false), 8x und 1x. Die Oder-Verknüpfung || bricht ab, sobald die Bedingung wahr ist.

danke.. ^^

Ubunutu_Newbie

(Themenstarter)
Avatar von Ubunutu_Newbie

Anmeldungsdatum:
17. Februar 2008

Beiträge: 37

Wohnort: /home/Trier

deprecated schrieb:

Ubunutu Newbie schrieb:

b) Wie oft werden die folgenden Statements bei obigem Ablauf des Skriptes ausgeführt?

16x (15x true, 1x false), 15x (5x true, 10x false), 10x (2x true, 8x false), 8x und 1x. Die Oder-Verknüpfung || bricht ab, sobald die Bedingung wahr ist.

ich habe da doch noch eine kleine frage und zwar bei

1
echo $WORT|grep B>/dev/null

war ja deine antwort 10x (2x true, 8x false). nur frage ich mich jetzt, wie du da genau drauf gekommen bist. normalerweise müsse da doch 4x true rauskommen? mit echo $WORT|grep a>/dev/null ⇒ a = 5x true, wäre ich einverstanden, da es ja 5 wörter mit dem gleinen 'a' gibt.

deprecated

Avatar von deprecated

Anmeldungsdatum:
21. Dezember 2009

Beiträge: 91

Wohnort: Wien

Es kommt bei der Auswertung auf die Reihenfolge an. Zwar gibt es 4 Wörter mit einem großen B, aber davon werden 2 schon mit grep a rausgefiltert.

echo $Wort |grep a ist erfolgreich bei

Ananas Backen Hacken Halle Barbier

Die 'a'-losen werden jeweils weiter ausgewertet mit echo $WORT|grep B; fehlerlos bei

Berg Burg 

und nur beim Rest (die Wörter, die weder a noch B enthalten) wird auch der letzte Ausdruck let i=$i+1 ausgewertet.

Abbe Apfel Apfelsine Asterix Huepfen Obelix Schuler Werbung 

Ubunutu_Newbie

(Themenstarter)
Avatar von Ubunutu_Newbie

Anmeldungsdatum:
17. Februar 2008

Beiträge: 37

Wohnort: /home/Trier

gut dann hab ich es jetzt verstanden.. ☺ danke für die mühe.. ☺

Antworten |