{"id":21253,"date":"2025-11-14T09:35:11","date_gmt":"2025-11-14T08:35:11","guid":{"rendered":"https:\/\/linux-bibel.at\/?p=21253"},"modified":"2025-11-14T09:35:11","modified_gmt":"2025-11-14T08:35:11","slug":"die-shell-working-in-a-coalmine-teil-3","status":"publish","type":"post","link":"https:\/\/linux-bibel.at\/index.php\/2025\/11\/14\/die-shell-working-in-a-coalmine-teil-3\/","title":{"rendered":"die shell \u2013 working in a coalmine Teil 3"},"content":{"rendered":"\r\n<p class=\"wp-block-paragraph\">die unterschiedlichen Shells und das erste Script.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">Unterschiedliche Shells<\/h2>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">&nbsp;<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Ja, die gibt es und nicht so knapp. Es m\u00fcssten so an die 10 verschiedene Shells noch existieren und unter Linux funktionieren. Shells f\u00fcr das Verteilen und Ausf\u00fchren von Jobs auf mehreren Systemen; Job-Control-Funktionen und vieles mehr. Damit das System wei\u00df, mit welcher shell er ein Script ausf\u00fchren muss, gibt es ein K\u00fcrzel, das in jedem Script am Anfang stehen sollte.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">&nbsp;<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>#!\/bin\/bash <\/code><\/pre>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">F\u00fcr alle fortgeschrittenen Personen: Man kann damit jeden beliebigen Interpreter verlangen. z.B Perl, Python oder auch PHP. Auch in einer bestimmten Versionen z.B php7<\/p>\r\n\r\n\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Wir wollen unser bash und der Interpretor liegt im \/bin Verzeichnis.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">Internal Field Seperator<\/h2>\r\n<p>den hatten wir schon im Teil 2. Jetzt k\u00f6nnten wir als n\u00e4chste Zeile die ILS-Variable umsetzen. Die shell erkennt von Haus aus die Zeichen blank, tab und new-line als Feldtrennung. Wenn wir also blanks und tabs nicht als Trennzeichen wollen dann k\u00f6nnen wir sie mit diesem Trick ausschalten.<\/p>\r\n\r\n\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">export ILS=&#8220;<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">damit uns Blanks nicht mehr st\u00f6ren. Erinnert ihr euch noch an unsere ersten Kommandos mit dem grep Befehl? Diesmal erweitern wir die Abfrage etwas und wir wollen sie f\u00fcr immer nutzen.<\/p>\r\n\r\n\r\n\r\n<h2 class=\"wp-block-heading\">Das erste Script<\/h2>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Also kommt als 3 Zeile der grep Befehl und wenn wir das ganze in einer Datei speichern, Dann h\u00e4tten wir unser erstes Script fertig. Nennen wir es telefon.sh; aber es fehlt noch etwas. Die Kennzeichnung, das wir es Exekutieren d\u00fcrfen. Das erreichen wir mit dem Befehl<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>chmod 700 telefon.sh\r\n\r\n<\/code><\/pre>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Die \u00dcbergabe Variable<\/p>\r\n<p>Die Shell \u00fcbergibt mir ein paar Informationen beim Startaufruf, so sind das die Variablen $* $# und $1 bis $&#8230;&#8220; $* beinhaltet den gesamten String $1 bis $&#8230; jeweils einen Parameter. und $# die Anzahl der Parameter. $0 ist das Programm das ich laufen habe.\u00a0<\/p>\r\n<p>Ok ich gebe zu, es w\u00e4re nicht besonders sch\u00f6n, jedes mal das Script zu \u00e4ndern, wenn ich eine Telefonnummer m\u00f6chte. W\u00e4re es nicht besser ich, ich w\u00fcrde &#8222;telefon.sh rett&#8220; aufrufen und bekomme alle dazu passenden Nummern angezeigt?<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Wir starten unseren Editor und \u00e4ndern unser Script. In der Shell werden die Aufruf-Parameter nacheinander \u00fcbergeben und zwar in die Variablen $1, $2 $3 usw.<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>#!\/bin\/bash\r\nexport ILS=\"\"\r\ncat telefonbuch.txt | grep -i \"$1\"\r\n\r\necho \"Ich bin ein tolles Programm mit dem Namen $0 und habe $# Begriffe \u00fcbergeben bekommen\" \r\n\r\n<\/code><\/pre>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Ich habe da gleich eine Zeile mehr dazugeschmuggelt, die Variable $0 beinhaltet den Programmnamen und die Variable $# die Anzahl der \u00fcbergebenen Parameter. <br \/><br \/>Sollte sich euer Programm nicht starten lassen, so liegt es daran das euer Verzeichnis nicht in den erlaubten Path f\u00fcr Programme liegt. Ihr m\u00fcsst Linux sagen, dass das Programm ausgef\u00fchrt werden soll. Entweder durch .\/telefon.sh oder durch die Eingabe des kompletten Pfad.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Also starten wir das Programm mit<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>.\/telefon.sh rett<\/code><\/pre>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">und bekommen eine Zeile angezeigt. Nun diese 1 Zeile ist zwar richtig aber nicht besonders sch\u00f6n. Und es k\u00f6nnten auch mehre Begriffe und damit Zeilen kommen.<\/p>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">Also verarbeiten wir diese Zeilen und trennen wir sie in einzelne Felder. Dazu haben wir mehre M\u00f6glichkeiten: die erste und unsch\u00f6ne, w\u00e4re eine Ausgabe mit echo und ein cut auf das Feld das ich m\u00f6chte. Die elegante und schnellere ist der set-Befehl der mir einen String aufteilt.<\/p>\r\n\r\n\r\n\r\n<pre class=\"wp-block-code\"><code>#!\/bin\/bash\r\nexport ILS=\"\"\r\nfor ZEILE in `cat telefonbuch.txt | grep -i \"$1\" `\r\ndo\r\n   NAME=`echo $ZEILE<span style=\"background-color: #f2f4f5\"> | cut -f1-1 -d\":\" ` <br \/><\/span>   TEL=`echo<span style=\"background-color: initial;font-family: inherit;font-size: inherit;text-align: initial;color: initial\"> $ZEILE | cut -f2-2 -d\";\" <\/span>`<\/code><br \/><code>   echo \"Name : $NAME Telefonnummer $TEL\"<\/code><br \/><code>done<\/code><\/pre>\r\n<pre class=\"wp-block-code\"><code>echo \"Ich bin ein tolles Programm mit dem Namen $0 und habe $# Begriffe \u00fcbergeben bekommen\" <\/code><\/pre>\r\n\r\n\r\n\r\n<p class=\"wp-block-paragraph\">und schauen wir was jetzt dabei herauskommt.\u00a0 Nat\u00fcrlich k\u00f6nnen wir vieles mehr in dieser Datei speichern und dann Abfragen.\u00a0<\/p>\r\n<p>Ich habe in diesem Beispiel, die Vorgehensweise absichtlich so einfach gew\u00e4hlt, weil jeder Befehl einen klaren Vorgang ausl\u00f6st und \u00fcbersichtlich wird.\u00a0<br \/>In den n\u00e4chsten Teil(en) werden wir uns Bedingungen (IF, test und CASE) und danach die regulare expression anschauen. regexp wie es oft bezeichnet macht die Shell dann so wirklich m\u00e4chtig, wenn ich z.B. wissen m\u00f6chte ob der Benutzer nur Ziffern eingeben hat oder die Klein\/Gro\u00dfschreibung beherrscht.<\/p>\r\n<p>Allerdings habe ich mir noch keinen Termin vorgenommen. Viel Spa\u00df bei eurem Telefonbuch.<\/p>\r\n<p>Wer jetzt eine sch\u00f6ne Oberfl\u00e4che m\u00f6chte, dem kann ich den Artikel https:\/\/linux-bibel.at\/index.php\/2025\/09\/19\/whipetail-oder-der-dialog-mit-dem-anwender\/<br \/>ans Herz legen.\u00a0 Die beiden miteinander zu kombinieren ist eine nette Besch\u00e4ftigung f\u00fcr kalte Winterabende.\u00a0<br \/><br \/>..Und ich hoffe, dass ihr einen Lichtschimmer am Ende des Tunnels seht.<\/p>\r\n\r\n\r\n<div class=\"pld-like-dislike-wrap pld-custom\">\r\n    <div class=\"pld-like-wrap  pld-common-wrap\">\r\n    <a href=\"javascript:void(0)\" class=\"pld-like-trigger pld-like-dislike-trigger  \" title=\"Gef\u00e4llt mir\" data-post-id=\"21253\" data-trigger-type=\"like\" data-restriction=\"cookie\" data-already-liked=\"0\">\r\n                            <img src=\"https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/12\/Daumen-Hoch.png\" alt=\"Gef\u00e4llt mir\" \/>\r\n            <\/a>\r\n    <span class=\"pld-like-count-wrap pld-count-wrap\">5    <\/span>\r\n<\/div><div class=\"pld-dislike-wrap  pld-common-wrap\">\r\n    <a href=\"javascript:void(0)\" class=\"pld-dislike-trigger pld-like-dislike-trigger  \" title=\"Gef\u00e4llt mir nicht\" data-post-id=\"21253\" data-trigger-type=\"dislike\" data-restriction=\"cookie\" data-already-liked=\"0\">\r\n                            <img src=\"https:\/\/linux-bibel.at\/wp-content\/uploads\/2023\/12\/Daumen-Runter.png\" alt=\"Gef\u00e4llt mir nicht\" \/>\r\n            <\/a>\r\n    <span class=\"pld-dislike-count-wrap pld-count-wrap\"><\/span>\r\n<\/div><\/div>","protected":false},"excerpt":{"rendered":"<p>die unterschiedlichen Shells und das erste Script. Unterschiedliche Shells &nbsp; Ja, die gibt es und nicht so knapp. Es m\u00fcssten so an die 10 verschiedene Shells noch existieren und unter Linux funktionieren. Shells f\u00fcr das Verteilen und Ausf\u00fchren von Jobs auf mehreren Systemen; Job-Control-Funktionen und vieles mehr. Damit das System wei\u00df, mit welcher shell er [&hellip;]<\/p>\n","protected":false},"author":52,"featured_media":21276,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"class_list":["post-21253","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-allgemein"],"_links":{"self":[{"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/posts\/21253","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/users\/52"}],"replies":[{"embeddable":true,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/comments?post=21253"}],"version-history":[{"count":13,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/posts\/21253\/revisions"}],"predecessor-version":[{"id":21302,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/posts\/21253\/revisions\/21302"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/media\/21276"}],"wp:attachment":[{"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/media?parent=21253"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/categories?post=21253"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/linux-bibel.at\/index.php\/wp-json\/wp\/v2\/tags?post=21253"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}