{"id":7236,"date":"2021-05-28T19:16:31","date_gmt":"2021-05-28T19:16:31","guid":{"rendered":"https:\/\/profi-tutorials.de\/linux\/?p=7236"},"modified":"2021-07-09T14:35:49","modified_gmt":"2021-07-09T14:35:49","slug":"befehl-expr","status":"publish","type":"post","link":"https:\/\/profi-tutorials.de\/linux\/grundlagen\/befehl-expr\/","title":{"rendered":"Der Befehl expr"},"content":{"rendered":"<p>In diesem Beitrag lernen Sie den Befehl expr kennen, welcher unter Linux- \/ UNIX-Betriebssystemen eingesetzt wird, um numerische- sowie String-Ausdr&uuml;cke auszuwerten.<\/p>\n<p>Neben der allgemeinen <a class=\"glossaryLink cmtt_Allgemein cmtt_Informatik\" aria-describedby=\"tt\" data-cmtooltip=\"&lt;div class=glossaryItemTitle&gt;Syntax&lt;\/div&gt;&lt;div class=glossaryItemBody&gt;&#8203;Im  Allgemeinen wird unter Syntax ein Regel&#8203;system verstanden, welches zur  Kombination elementarer Zeichen zu zusammengesetzten &#8203;Zeichen in (...)&lt;\/div&gt;\" href=\"https:\/\/profi-tutorials.de\/linux\/glossar\/syntax\/\" target=\"_blank\" data-mobile-support=\"0\" data-gt-translate-attributes='[{\"attribute\":\"data-cmtooltip\", \"format\":\"html\"}]' tabindex=\"0\" role=\"link\">Syntax<\/a> lernen Sie auch die Anwendung des Befehls expr anhand verschiedener Beispiele anschaulich kennen.<\/p>\n<h2 id=\"t-1621348942845\">Allgemeine Syntax<\/h2>\n<p>Die allgemeine Syntax von <strong>expr <\/strong>lautet folgenderma&szlig;en:<\/p>\n<pre>expr [Ausdruck]<\/pre>\n<p>Der <strong>expr <\/strong>&uuml;bergebene Ausdruck l&auml;sst sich nun aus verschiedenen Operanden \/ Operatoren zusammensetzen, welche in den folgenden Abschnitten n&auml;her erl&auml;utert werden.<\/p>\n<h2 id=\"t-1621348942846\">String-Ausdr&uuml;cke<\/h2>\n<p>Der Befehl <strong>expr <\/strong>unterst&uuml;tzt neben Pattern-Matching auch einige weitere String-Operatoren, welche bei der Erstellung von String-Ausdr&uuml;cken auch kombiniert werden k&ouml;nnen. String-Operatoren haben die h&ouml;chste Pr&auml;zedenz aller bei <strong>expr <\/strong>verf&uuml;gbaren Operatoren.<\/p>\n<p>Im Folgenden werden die verf&uuml;gbaren String-Operationen vorgestellt.<\/p>\n<h3 id=\"t-1621348942847\">Pattern-Matching<\/h3>\n<p>Pattern-Matching wird mit der folgenden Syntax durchgef&uuml;hrt:<\/p>\n<pre>[String] : [Regex]<\/pre>\n<p>Die folgende alternative Syntax ist jedoch ebenfalls g&uuml;ltig:<\/p>\n<pre>match [String] [Regex]<\/pre>\n<p>Die &uuml;bergebenen Argumente werden automatisch in Strings konvertiert. Das zweite Argument wird als einfacher <a class=\"glossaryLink cmtt_Informatik\" aria-describedby=\"tt\" data-cmtooltip=\"&lt;div class=glossaryItemTitle&gt;Regex [Regular Expression]&lt;\/div&gt;&lt;div class=glossaryItemBody&gt;Regul&auml;re Ausdr&uuml;cke (engl. regular expression, regex) sind spezielle Zeichenketten, die ein Suchmuster definieren.&lt;\/div&gt;\" href=\"https:\/\/profi-tutorials.de\/linux\/glossar\/regex\/\" target=\"_blank\" data-mobile-support=\"0\" data-gt-translate-attributes='[{\"attribute\":\"data-cmtooltip\", \"format\":\"html\"}]' tabindex=\"0\" role=\"link\">regul&auml;rer Ausdruck<\/a> interpretiert, wobei ein &ldquo;^&rdquo; als Pr&auml;fix implizit angeh&auml;ngt wird, und mit dem ersten Argument verglichen.<\/p>\n<p>Bei einem erfolgreichen Match wird standardm&auml;&szlig;ig die <strong>Anzahl &uuml;bereinstimmender Zeichen<\/strong> ausgegeben &ndash; wurde im regul&auml;ren Ausdruck geklammert (&ldquo;<strong>(<\/strong>&rdquo; und &ldquo;<strong>)<\/strong>&ldquo;), so wird stattdessen der mit diesem Subausdruck &uuml;bereinstimmende <strong>Teil des &uuml;bergebenen Strings<\/strong> ausgegeben. F&uuml;r die Ausgabe des Pattern-Matching ist dabei lediglich das erste Vorkommen von Klammern relevant, alle weiteren Klammern dienen ausschlie&szlig;lich der Einhaltung von Pr&auml;zedenzregeln. Schl&auml;gt der Match fehl, so wird ohne Verwendung von Klammerung eine &ldquo;<strong>0<\/strong>&ldquo;, andernfalls der <strong>null-String<\/strong> ausgegeben.<\/p>\n<h5>Beispiel: Pattern-Matching 1<\/h5>\n<h6 style=\"\"><span style=\"font-weight: normal;\">In diesem Beispiel soll am Anfang des Strings &ldquo;<\/span>Linux Prof. Hellberg EDV-Beratung &ndash; Profi-Tutorials<span style=\"font-weight: normal;\">&rdquo; nach einer &Uuml;bereinstimmung mit dem Wort &ldquo;<\/span>Linux<span style=\"font-weight: normal;\">&rdquo; gesucht werden. Da das Zeichen &ldquo;^&rdquo;, welches den Anfang einer Zeile markiert, stet impliziert wird, wird als regul&auml;rer Ausdruck lediglich das Wort &ldquo;<\/span>Linux<span style=\"font-weight: normal;\">&rdquo; angegeben.<\/span><\/h6>\n<h6>Eingabe:<\/h6>\n<p>expr &lsquo;Linux Prof. Hellberg EDV-Beratung &ndash; Profi-Tutorials&rsquo; : &lsquo;Linux&rsquo;<\/p>\n<h6>Ausgabe:<\/h6>\n<p>Es wird eine &ldquo;<strong>5<\/strong>&rdquo; ausgegeben, da die ersten 5 Zeichen des Strings mit dem regul&auml;ren Ausdruck &uuml;bereinstimmen. In diesem Fall entspricht dies genau der L&auml;nge des Wortes &ldquo;<strong>Linux<\/strong>&ldquo;.<\/p>\n<p>5<\/p>\n<h5>Beispiel: Pattern-Matching 2<\/h5>\n<h6 style=\"\"><span style=\"font-weight: normal;\">Aus einem Titel wie &ldquo;<\/span>Der Befehl expr<span style=\"font-weight: normal;\">&rdquo; soll in diesem Beispiel der Befehlsteil (&ldquo;<\/span>expr<span style=\"font-weight: normal;\">&ldquo;) extrahiert werden. Klammerung wird hierbei eingesetzt, um eine beliebige auf &ldquo;<\/span>Der Befehl<span style=\"font-weight: normal;\">&rdquo; folgende Zeichenkette auszugeben.<\/span><\/h6>\n<h6>Eingabe:<\/h6>\n<p>expr &lsquo;Der Befehl expr&rsquo; : &lsquo;Der Befehl (.*)&rsquo;<\/p>\n<h6>Ausgabe:<\/h6>\n<p>Erwartungsgem&auml;&szlig; gibt <strong>expr<\/strong> an dieser Stelle das <a class=\"glossaryLink cmtt_Allgemein cmtt_Informatik\" aria-describedby=\"tt\" data-cmtooltip=\"&lt;div class=glossaryItemTitle&gt;Wort&lt;\/div&gt;&lt;div class=glossaryItemBody&gt;Ein Wort ist in der Informatik eine endliche Folge &uuml;ber einem Alphabet.&lt;\/div&gt;\" href=\"https:\/\/profi-tutorials.de\/linux\/glossar\/wort\/\" target=\"_blank\" data-mobile-support=\"0\" data-gt-translate-attributes='[{\"attribute\":\"data-cmtooltip\", \"format\":\"html\"}]' tabindex=\"0\" role=\"link\">Wort<\/a> &ldquo;<strong>expr<\/strong>&rdquo; aus. Mithilfe des verwendeten regul&auml;ren Ausdrucks ist es damit m&ouml;glich, den Befehlsteil eines beliebigen Titels &ldquo;<strong>Der Befehl [Befehl]<\/strong>&rdquo; zu erhalten.<\/p>\n<p>expr<\/p>\n<h3 id=\"t-1621348942848\">Substring<\/h3>\n<p>Ein Substring des &uuml;bergebenen Strings [<strong>String<\/strong>], beginnend an der Position [<strong>Position<\/strong>] mit der L&auml;nge [<strong>L&auml;nge<\/strong>], wird mit der folgenden Syntax erhalten:<\/p>\n<pre>substr [string] [Position] [L&auml;nge]<\/pre>\n<p>Ist das L&auml;ngen- und \/ oder Positions-Argument <strong>null<\/strong>, <strong>negativ<\/strong> oder <strong>nicht-numerisch<\/strong>, so wird stets der <strong>null-String<\/strong> ausgegeben.<\/p>\n<h5>Beispiel: Substring<\/h5>\n<h6 style=\"\"><span style=\"font-weight: normal;\">Dem String &ldquo;<\/span>Prof. Hellberg EDV-Beratung<span style=\"font-weight: normal;\">&rdquo; soll in diesem Beispiel der Name &ldquo;<\/span>Hellberg<span style=\"font-weight: normal;\">&rdquo; entnommen werden. Dazu wird das Keyword &ldquo;<\/span>substr<span style=\"font-weight: normal;\">&rdquo; mit der Position &ldquo;<\/span>7<span style=\"font-weight: normal;\">&rdquo; (Position vom &ldquo;<\/span>H<span style=\"font-weight: normal;\">&rdquo; im String) und der L&auml;nge &ldquo;<\/span>8<span style=\"font-weight: normal;\">&rdquo; (L&auml;nge des Wortes &ldquo;<\/span>Hellberg<span style=\"font-weight: normal;\">&ldquo;) verwendet.<\/span><\/h6>\n<h6>Eingabe:<\/h6>\n<p>expr substr &lsquo;Prof. Hellberg EDV-Beratung&rsquo; 7 8<\/p>\n<h6>Ausgabe:<\/h6>\n<p><strong>expr<\/strong> gibt nun die <a class=\"glossaryLink cmtt_Allgemein cmtt_Informatik\" aria-describedby=\"tt\" data-cmtooltip=\"&lt;div class=glossaryItemTitle&gt;String&lt;\/div&gt;&lt;div class=glossaryItemBody&gt;Ein String ist in der Informatik eine Zeichenkette - stellt also eine endliche Folge von Zeichen aus einem bestimmten Zeichensatz,(...)&lt;\/div&gt;&lt;div class=cmtt_synonyms_wrapper&gt;&lt;div class=cmtt_synonyms_title&gt;Synonyms: &lt;\/div&gt;&lt;div class=cmtt_synonyms&gt;Zeichenkette&lt;\/div&gt;&lt;\/div&gt;\" href=\"https:\/\/profi-tutorials.de\/linux\/glossar\/string\/\" target=\"_blank\" data-mobile-support=\"0\" data-gt-translate-attributes='[{\"attribute\":\"data-cmtooltip\", \"format\":\"html\"}]' tabindex=\"0\" role=\"link\">Zeichenkette<\/a>, welche an der 7. Position beginnt und an der 14. Position (7+8-1) endet, aus.<\/p>\n<p>Hellberg<\/p>\n<h3 id=\"t-1621348942849\">Index<\/h3>\n<p>Die Position des ersten Vorkommnisses eines Zeichens aus einem spezifischen <a class=\"glossaryLink cmtt_Informatik\" aria-describedby=\"tt\" data-cmtooltip=\"&lt;div class=glossaryItemTitle&gt;Zeichensatz&lt;\/div&gt;&lt;div class=glossaryItemBody&gt;Ein Zeichensatz ist ein Vorrat an Elementen bzw. Zeichen, aus denen sich sogenannte Zeichenketten bauen lassen.&lt;\/div&gt;\" href=\"https:\/\/profi-tutorials.de\/linux\/glossar\/zeichensatz\/\" target=\"_blank\" data-mobile-support=\"0\" data-gt-translate-attributes='[{\"attribute\":\"data-cmtooltip\", \"format\":\"html\"}]' tabindex=\"0\" role=\"link\">Zeichensatz<\/a> im &uuml;bergebenen String wird mit folgender Syntax ermittelt:<\/p>\n<pre>index [String] [Zeichensatz]<\/pre>\n<p>Wird kein Vorkommnis gefunden, so wird eine &ldquo;<strong>0<\/strong>&rdquo; ausgegeben.<\/p>\n<h5>Beispiel: Index<\/h5>\n<h6 style=\"\"><span style=\"font-weight: normal;\">In diesem Beispiel soll die erste Position in einem String, an welcher eines der Zeichen &ldquo;<\/span>a<span style=\"font-weight: normal;\">&ldquo;, &ldquo;<\/span>b<span style=\"font-weight: normal;\">&ldquo;, &ldquo;<\/span>C<span style=\"font-weight: normal;\">&rdquo; oder &ldquo;<\/span>d<span style=\"font-weight: normal;\">&rdquo; auftaucht, ermittelt werden.<\/span><\/h6>\n<h6>Eingabe:<\/h6>\n<p>expr index &lsquo;IT-Consulting&rsquo; &lsquo;abCd&rsquo;<\/p>\n<h6>Ausgabe:<\/h6>\n<p>In diesem Fall wird eine &ldquo;<strong>4<\/strong>&rdquo; ausgegeben, da das Zeichen &ldquo;<strong>C<\/strong>&rdquo; an 4. Position im String &ldquo;<strong>IT-Consulting<\/strong>&rdquo; auftaucht.<\/p>\n<p>4<\/p>\n<h3 id=\"t-1621348942850\">L&auml;nge<\/h3>\n<p>Die L&auml;nge eines &uuml;bergebenen Strings wird folgenderma&szlig;en ermittelt:<\/p>\n<pre>length [String]<\/pre>\n<h5>Beispiel: L&auml;nge<\/h5>\n<h6 style=\"\"><span style=\"font-weight: normal;\">Die L&auml;nge des Strings &ldquo;<\/span>Profi-Tutorials<span style=\"font-weight: normal;\">&rdquo; wird in diesem Beispiel ermittelt:<\/span><\/h6>\n<h6>Eingabe:<\/h6>\n<p>expr length &lsquo;Profi-Tutorials&rsquo;<\/p>\n<h6>Ausgabe:<\/h6>\n<p><strong>expr<\/strong> gibt eine &ldquo;<strong>15<\/strong>&rdquo; aus &ndash; die L&auml;nge des Strings &ldquo;<strong>Profi-Tutorials<\/strong>&ldquo;.<\/p>\n<p>15<\/p>\n<h3 id=\"t-1621348942851\">String-Interpretation<\/h3>\n<p>Mithilfe des <strong>Plus<\/strong> &ldquo;+&rdquo; Operators (GNU Extensions) wird das &uuml;bergebene Argument <strong>[<a class=\"glossaryLink cmtt_Informatik\" aria-describedby=\"tt\" data-cmtooltip=\"&lt;div class=glossaryItemTitle&gt;Token&lt;\/div&gt;&lt;div class=glossaryItemBody&gt;Ein Token ist eine Folge zusammengeh&ouml;riger Zeichen, welche von einer formalen Grammatik einem Typ zuzuordnen ist.&lt;\/div&gt;\" href=\"https:\/\/profi-tutorials.de\/linux\/glossar\/token\/\" target=\"_blank\" data-mobile-support=\"0\" data-gt-translate-attributes='[{\"attribute\":\"data-cmtooltip\", \"format\":\"html\"}]' tabindex=\"0\" role=\"link\">Token<\/a>] als String interpretiert<\/strong> &ndash; unabh&auml;ngig davon, ob es sich um ein spezielles <strong>Keyword<\/strong>, wie etwa &ldquo;<strong>match<\/strong>&rdquo; oder &ldquo;<strong>index<\/strong>&ldquo;, handelt:<\/p>\n<pre>+ [Token]<\/pre>\n<p>Soll der Befehl <strong>expr<\/strong> ein <strong>Keyword als String<\/strong> interpretieren, so m&uuml;ssen stets <strong>Anf&uuml;hrungszeichen &ldquo;&rdquo;<\/strong> verwendet werden.<\/p>\n<h2 id=\"t-1621348942852\">Numerische Ausdr&uuml;cke<\/h2>\n<p>Der Befehl <strong>expr<\/strong> erlaubt die Verwendung der mathematischen Standardoperationen &ndash; die &uuml;blichen Pr&auml;zedenzregeln werden dabei eingehalten. Die Pr&auml;zedenz der numerischen Operatoren ist h&ouml;her als die der relationalen \/ logischen Operatoren.<\/p>\n<h3 id=\"t-1621348942853\">Addition \/ Substraktion<\/h3>\n<p>Die <strong>Addition zweier Integer-Zahlen<\/strong> wird folgenderma&szlig;en durchgef&uuml;hrt:<\/p>\n<pre>[Integer 1] + [Integer 2]<\/pre>\n<p>Analog wird auch die <strong>Subtraktion<\/strong> durchgef&uuml;hrt:<\/p>\n<pre>[Integer 1] - [Integer 2]<\/pre>\n<p>K&ouml;nnen die &uuml;bergebenen Argumente nicht als Integer interpretiert werden, so gibt <strong>expr<\/strong> eine <strong>Error-Meldung<\/strong> aus.<\/p>\n<h5>Beispiel: Addition<\/h5>\n<h6 style=\"\"><span style=\"font-weight: normal;\">Dieses Beispiel zeigt die <\/span>Addition<span style=\"font-weight: normal;\"> zweier Zahlen.<\/span><\/h6>\n<h6>Eingabe:<\/h6>\n<p style=\"\">expr 55 + 45<\/p>\n<h6>Ausgabe:<\/h6>\n<p>Das Ergebnis der Addition &ldquo;55 + 45&rdquo; wird ausgegeben.<\/p>\n<p>100<\/p>\n<h5>Beispiel: Subtraktion<\/h5>\n<h6 style=\"\"><span style=\"font-weight: normal;\">Hier wird die <\/span>Subtraktion<span style=\"font-weight: normal;\"> zweier Zahlen gezeigt.<\/span><\/h6>\n<h6>Eingabe:<\/h6>\n<p>expr 10 &ndash; 2<\/p>\n<h6>Ausgabe:<\/h6>\n<p><strong>expr<\/strong> gibt das Ergebnis der Subtraktion &ldquo;10 &ndash; 2&rdquo; aus.<\/p>\n<p>8<\/p>\n<h3 id=\"t-1621606804663\">Multiplikation \/ Division \/ Modulo<\/h3>\n<p>Die <strong>Multiplikation <\/strong>erfolgt nach folgender Syntax (Das Zeichen &ldquo;<strong>*<\/strong>&rdquo; muss maskiert werden, damit es nicht von der Shell interpretiert wird):<\/p>\n<pre>[Integer 1] * [Integer 2]<\/pre>\n<p>Die <strong>Division <\/strong>wird mit dem <strong>Operator <\/strong>&ldquo;<strong>\/<\/strong>&rdquo; durchgef&uuml;hrt:<\/p>\n<pre>[Integer 1] \/ [Integer 2]<\/pre>\n<p>Schlie&szlig;lich wird auch der <strong>Modulo-Operator<\/strong> &ldquo;<strong>%<\/strong>&rdquo; unterst&uuml;tzt, welcher den <strong>Rest einer Integer-Division<\/strong> ausgibt:<\/p>\n<pre>[Integer 1] % [Integer 2]<\/pre>\n<h5>Beispiel: Multiplikation<\/h5>\n<h6 style=\"\"><span style=\"font-weight: normal;\">Zwei Zahlen werden in diesem Beispiel multipliziert.<\/span><\/h6>\n<h6>Eingabe:<\/h6>\n<p>expr 6 * 6<\/p>\n<h6>Ausgabe:<\/h6>\n<p>Das Produkt der beiden Zahlen wird ausgegeben.<\/p>\n<p>36<\/p>\n<h5>Beispiel: Division<\/h5>\n<h6 style=\"\"><span style=\"font-weight: normal;\">Eine Zahl wird in diesem Beispiel durch eine andere geteilt. Zu beachten ist hierbei der Rest.<\/span><\/h6>\n<h6>Eingabe:<\/h6>\n<p>expr 9 \/ 2<\/p>\n<h6>Ausgabe:<\/h6>\n<p><strong>expr <\/strong>gibt eine &ldquo;<strong>4<\/strong>&rdquo; als Ergebnis der Division zur&uuml;ck. In diesem Fall besteht ein Rest, da es sich um eine Integer-Division handelt. Der Rest kann mit dem <strong>Modulo-Operator<\/strong> &ldquo;<strong>%<\/strong>&rdquo; bestimmt werden.<\/p>\n<p>4<\/p>\n<h5>Beispiel: Modulo<\/h5>\n<h6 style=\"\"><span style=\"font-weight: normal;\">In diesem Beispiel soll der Rest der zuvor durchgef&uuml;hrten Division &ldquo;<\/span>9 \/ 2<span style=\"font-weight: normal;\">&rdquo; ermittelt werden.<\/span><\/h6>\n<h6>Eingabe:<\/h6>\n<p>expr 9 % 2<\/p>\n<h6>Ausgabe:<\/h6>\n<p>Der durch die Modulo-Operation berechnete Rest betr&auml;gt &ldquo;<strong>1<\/strong>&ldquo;. (<strong>2 * 4 + Rest 1 = 9<\/strong>)<\/p>\n<p>1<\/p>\n<h2 id=\"t-1621606804664\">Relationale \/ logische Ausdr&uuml;cke<\/h2>\n<p>Auch einige relationale bzw. logische Operatoren werden von <strong>expr <\/strong>unterst&uuml;tzt. Die relationalen \/ logischen Operatoren haben die niedrigste Pr&auml;zedenz &ndash; im Folgenden werden diese nach aufsteigender Rangfolge vorgestellt:<\/p>\n<h3 id=\"t-1621606804665\">Oder<\/h3>\n<p>Ein Lazy-Oder wird mit der folgenden Syntax realisiert (das <strong>Pipe-Symbol<\/strong> &ldquo;<strong>|<\/strong>&rdquo; muss maskiert werden):<\/p>\n<pre>[Argument 1] | [Argument 2]<\/pre>\n<p><strong>expr <\/strong>gibt hierbei das erste Argument zur&uuml;ck, wenn es sich weder um den <strong>null-String<\/strong> noch den Zahlenwert &ldquo;<strong>0<\/strong>&rdquo; handelt. Andernfalls wird das zweite Argument ausgegeben &ndash; vorausgesetzt die genannten Bedingungen gelten hierf&uuml;r. Treffen die Bedingungen weeder bei dem ersten, noch dem zweiten Argument zu, so ist die Ausgabe &ldquo;<strong>0<\/strong>&ldquo;.<\/p>\n<p>Es handelt sich um ein <strong>Lazy-Oder<\/strong>, weswegen das zweite Argument nicht ausgewertet wird, wenn eine Ausgabe des ersten Arguments erfolgt.<\/p>\n<h5>Beispiel: Oder<\/h5>\n<h6 style=\"\"><span style=\"font-weight: normal;\">Hier wird eine Order-Verkn&uuml;pfung der beiden Argumente &ldquo;<\/span>5<span style=\"font-weight: normal;\">&rdquo; und &ldquo;<\/span>0<span style=\"font-weight: normal;\">&rdquo; durchgef&uuml;hrt.<\/span><\/h6>\n<h6>Eingabe:<\/h6>\n<p>expr 5 | 0<\/p>\n<h6>Ausgabe:<\/h6>\n<p>Das Ergebnis der Oder-Verkn&uuml;pfung ist die &ldquo;<strong>5<\/strong>&rdquo; &ndash; es handelt sich bei diesem ersten Argument weder um den <strong>null-String<\/strong>, noch um den Zahlenwert &ldquo;<strong>0<\/strong>&ldquo;. Das zweite Argument &ldquo;<strong>0<\/strong>&rdquo; wird von <strong>expr <\/strong>daher nicht betrachtet.<\/p>\n<p>5<\/p>\n<h3 id=\"t-1621606804666\">Und<\/h3>\n<p>Mit der folgenden Syntax wird die Verkn&uuml;pfung zweier Argumente mit einem Lazy-Und durchgef&uuml;hrt (das <strong>Et-Zeichen<\/strong> &ldquo;<strong>&amp;<\/strong>&rdquo; muss maskiert werden):<\/p>\n<pre>[Argument 1] &amp; [Argument 2]<\/pre>\n<p><strong>expr <\/strong>gibt hier das erste Argument aus, sofern keines der beiden Argumente der <strong>null-String<\/strong> oder &ldquo;<strong>0<\/strong>&rdquo; ist. Andernfalls wird eine &ldquo;<strong>0<\/strong>&rdquo; ausgegeben.<\/p>\n<p>Auch hier handelt es sich wieder um eine <strong>Lazy-Variante<\/strong>: Das zweite Argument wird nicht ausgewertet, wenn die Bedingungen f&uuml;r das erste Argument nicht zutreffen.<\/p>\n<h5>Beispiel: Und 1<\/h5>\n<h6 style=\"\"><span style=\"font-weight: normal;\">Eine Und-Verkn&uuml;pfung zweier Operatoren wird in diesem Beispiel vorgestellt.<\/span><\/h6>\n<h6>Eingabe:<\/h6>\n<p>expr 0 &amp; &ldquo;hedv&rdquo;<\/p>\n<h6>Ausgabe:<\/h6>\n<p>Es wird eine &ldquo;<strong>0<\/strong>&rdquo; ausgegeben, da es sich bei dem ersten Argument um den Zahlenwert &ldquo;<strong>0<\/strong>&rdquo; handelt.<\/p>\n<p>0<\/p>\n<h5>Beispiel: Und 2<\/h5>\n<h6 style=\"\"><span style=\"font-weight: normal;\">Dieses Beispiel zeigt eine weitere Und-Verkn&uuml;pfung.<\/span><\/h6>\n<h6>Eingabe:<\/h6>\n<p>expr &ldquo;admina&rdquo; &amp; &ldquo;hedv&rdquo;<\/p>\n<h6>Ausgabe:<\/h6>\n<p>Das erste Argument &ldquo;<strong>admina<\/strong>&rdquo; wird ausgegeben, da es sich bei keinem der beiden Argumente um den <strong>null-String<\/strong> oder den Zahlenwert &ldquo;<strong>0<\/strong>&rdquo; handelt.<\/p>\n<p>admina<\/p>\n<h3 id=\"t-1621606804667\">Relationale Operatoren<\/h3>\n<p>Mithilfe der in der folgenden Tabelle aufgelisteten Operatoren lassen sich zwei Argumente miteinander <strong>vergleichen<\/strong>. Die Syntax ist die folgende (auch hier m&uuml;ssen Operatoren teilweise maskiert werden, da diese &ndash; beispielsweise die Umleitung mit &ldquo;&lt;&rdquo; &ndash; sonst von der Shell interpretiert werden):<\/p>\n<pre>[Argument 1] [Operator] [Argument 2]<\/pre>\n<p><strong>expr <\/strong>versucht zun&auml;chst, die &uuml;bergebenen Argumente in Integer zu konvertieren und anschlie&szlig;end einen <strong>numerischen Vergleich<\/strong> durchzuf&uuml;hren &ndash; schl&auml;gt dies fehl, so wird ein <strong>lexikographischer Vergleich<\/strong> unter Verwendung der durch die <strong><a class=\"glossaryLink cmtt_Informatik\" aria-describedby=\"tt\" data-cmtooltip=\"&lt;div class=glossaryItemTitle&gt;Umgebungsvariable&lt;\/div&gt;&lt;div class=glossaryItemBody&gt;Eine Umgebungsvariable ist in Betriebssystemen &uuml;blicherweise eine konfigurierbare Variable, welche oft Pfade zu bestimmten Dateien aber auch(...)&lt;\/div&gt;&lt;div class=cmtt_synonyms_wrapper&gt;&lt;div class=cmtt_synonyms_title&gt;Synonyms: &lt;\/div&gt;&lt;div class=cmtt_synonyms&gt;Environment Variable&lt;\/div&gt;&lt;\/div&gt;\" href=\"https:\/\/profi-tutorials.de\/linux\/glossar\/umgebungsvariable\/\" target=\"_blank\" data-mobile-support=\"0\" data-gt-translate-attributes='[{\"attribute\":\"data-cmtooltip\", \"format\":\"html\"}]' tabindex=\"0\" role=\"link\">Umgebungsvariable<\/a> <\/strong>&ldquo;<strong>LC_COLLATE<\/strong>&rdquo; spezifizierten <strong>Sortierreihenfolge <\/strong>durchgef&uuml;hrt.<\/p>\n<table data-rows=\"7\" data-cols=\"2\" data-v=\"middle\">\n<thead>\n<tr>\n<th style=\"\"><strong>Operator<\/strong><\/th>\n<th style=\"\">Beschreibung<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td data-th=\"Operator\" style=\"\">\n<p style=\"text-align: center;\">&lt;<\/p>\n<\/td>\n<td data-th=\"Beschreibung\" style=\"\">\n<p style=\"text-align: center;\">[Argument 1] ist echt kleiner als [Argument 2]\n<\/p><\/td>\n<\/tr>\n<tr>\n<td data-th=\"Operator\" style=\"\">\n<p style=\"text-align: center;\">&lt;=<\/p>\n<\/td>\n<td data-th=\"Beschreibung\" style=\"\">\n<p style=\"text-align: center;\">[Argument 1] ist kleiner oder gleich [Argument 2]\n<\/p><\/td>\n<\/tr>\n<tr>\n<td data-th=\"Operator\" style=\"\">\n<p style=\"text-align: center;\">= bzw. ==<\/p>\n<\/td>\n<td data-th=\"Beschreibung\" style=\"\">\n<p style=\"text-align: center;\">[Argument 1] ist gleich [Argument 2]\n<\/p><\/td>\n<\/tr>\n<tr>\n<td data-th=\"Operator\" style=\"\">\n<p style=\"text-align: center;\">!=<\/p>\n<\/td>\n<td data-th=\"Beschreibung\" style=\"\">\n<p style=\"text-align: center;\">[Argument 1] ist ungleich [Argument 2]\n<\/p><\/td>\n<\/tr>\n<tr>\n<td data-th=\"Operator\" style=\"\" rowspan=\"1\" colspan=\"1\">\n<p style=\"text-align: center;\">&gt;=<\/p>\n<\/td>\n<td data-th=\"Beschreibung\" style=\"\" rowspan=\"1\" colspan=\"1\">\n<p style=\"text-align: center;\">[Argument 1] ist gr&ouml;&szlig;er oder gleich [Argument 2]\n<\/p><\/td>\n<\/tr>\n<tr>\n<td data-th=\"Operator\" style=\"\" rowspan=\"1\" colspan=\"1\">\n<p style=\"text-align: center;\">&gt;<\/p>\n<\/td>\n<td data-th=\"Beschreibung\" style=\"\" rowspan=\"1\" colspan=\"1\">\n<p style=\"text-align: center;\">[Argument 1] ist echt gr&ouml;&szlig;er als [Argument 2]\n<\/p><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h5>Beispiel: Gleichheit 1<\/h5>\n<h6 style=\"\"><span style=\"font-weight: normal;\">In diesem Beispiel wird die Gleichheit zweier Argumente &uuml;berpr&uuml;ft.<\/span><\/h6>\n<h6>Eingabe:<\/h6>\n<p>expr &ldquo;profi&rdquo; == &ldquo;profi&rdquo;<\/p>\n<h6>Ausgabe:<\/h6>\n<p>Da beide Argumente gleich sind, gibt <strong>expr <\/strong>den Wert &ldquo;<strong>1<\/strong>&rdquo; aus.<\/p>\n<p>1<\/p>\n<h5>Beispiel: Gleichheit 2<\/h5>\n<h6 style=\"\"><span style=\"font-weight: normal;\">Auch hier soll die &Uuml;berpr&uuml;fung der Gleichheit zweier Argumente stattfinden.<\/span><\/h6>\n<h6>Eingabe:<\/h6>\n<p>expr &ldquo;profi&rdquo; == &ldquo;tutorials&rdquo;<\/p>\n<h6>Ausgabe:<\/h6>\n<p>In diesem Fall wird eine &ldquo;<strong>0<\/strong>&rdquo; ausgegeben, da die Argumente &ldquo;<strong>profi<\/strong>&rdquo; und &ldquo;<strong>tutorials<\/strong>&rdquo; ungleich sind.<\/p>\n<p>0<\/p>\n<h5>Beispiel: Gr&ouml;&szlig;er als<\/h5>\n<h6 style=\"\"><span style=\"font-weight: normal;\">Dieses Beispiel zeigt die Durchf&uuml;hrung eines &ldquo;<\/span>gr&ouml;&szlig;er als<span style=\"font-weight: normal;\">&ldquo;-Vergleichs.<\/span><\/h6>\n<h6>Eingabe:<\/h6>\n<p>expr 50 &gt; 42<\/p>\n<h6>Ausgabe:<\/h6>\n<p>Es wird eine &ldquo;<strong>1<\/strong>&rdquo; ausgegeben &ndash; der Vergleich ist g&uuml;ltig.<\/p>\n<p>1<\/p>\n<h5>Beispiel: Kleiner als<\/h5>\n<h6 style=\"\"><span style=\"font-weight: normal;\">Hier wird ein &ldquo;<\/span>kleiner als<span style=\"font-weight: normal;\">&ldquo;-Vergleich gezeigt.<\/span><\/h6>\n<h6>Eingabe:<\/h6>\n<p>expr &ldquo;xyz&rdquo; &lt; &ldquo;abc&rdquo;<\/p>\n<h6>Ausgabe:<\/h6>\n<p>Der Befehl <strong>expr <\/strong>gibt hier eine &ldquo;<strong>0<\/strong>&rdquo; aus, da das Argument &ldquo;<strong>xyz<\/strong>&rdquo; lexikographisch gr&ouml;&szlig;er ist als das Argument &ldquo;<strong>abc<\/strong>&ldquo;.<\/p>\n<p>0<\/p>\n<h2 style=\"\" id=\"t-1622031632262\">Exit-Status<\/h2>\n<p style=\"\">Der Befehl <strong>expr <\/strong>kennt schlie&szlig;lich folgende <strong>Exit-Status<\/strong>:<\/p>\n<table data-rows=\"5\" data-cols=\"2\" data-v=\"middle\">\n<thead>\n<tr>\n<th style=\"\">Exit-Status<\/th>\n<th style=\"\">Beschreibung<\/th>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td data-th=\"Exit-Status\" style=\"\">\n<p style=\"text-align: center;\">0<\/p>\n<\/td>\n<td data-th=\"Beschreibung\" style=\"\">\n<p style=\"text-align: center;\">Der Ausdruck ist weder null, noch &ldquo;0&rdquo;<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-th=\"Exit-Status\" style=\"\">\n<p style=\"text-align: center;\">1<\/p>\n<\/td>\n<td data-th=\"Beschreibung\" style=\"\">\n<p style=\"text-align: center;\">Der Ausdruck ist null oder &ldquo;0&rdquo;<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-th=\"Exit-Status\" style=\"\">\n<p style=\"text-align: center;\">2<\/p>\n<\/td>\n<td data-th=\"Beschreibung\" style=\"\">\n<p style=\"text-align: center;\">Der Ausdruck ist ung&uuml;ltig<\/p>\n<\/td>\n<\/tr>\n<tr>\n<td data-th=\"Exit-Status\" style=\"\">\n<p style=\"text-align: center;\">3<\/p>\n<\/td>\n<td data-th=\"Beschreibung\" style=\"\">\n<p style=\"text-align: center;\">Ein interner Fehler ist aufgetreten (beispielsweise ein arithmetischer &Uuml;berlauf)<\/p>\n<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"text-align: center;\">Abonniere JETZT unseren Newsletter!<\/p>\n<p style=\"text-align: center;\">Verpasse nie wieder <strong>neue<\/strong> Beitr&auml;ge und <strong>exklusive Insider-Only-Inhalte!<\/strong><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In diesem Beitrag lernen Sie den Befehl expr kennen, welcher unter Linux- \/ UNIX-Betriebssystemen eingesetzt wird, um numerische- sowie String-Ausdr\u00fccke auszuwerten. Neben der allgemeinen Syntax lernen Sie auch die Anwendung des Befehls expr anhand verschiedener Beispiele anschaulich kennen. Allgemeine Syntax Die allgemeine Syntax von expr lautet folgenderma\u00dfen: Der expr \u00fcbergebene Ausdruck l\u00e4sst sich nun aus [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":7876,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_seopress_robots_primary_cat":"none","_seopress_titles_title":"%%post_title%% %%sep%% %%sitetitle%%","_seopress_titles_desc":"In diesem Beitrag lernen Sie den Befehl expr kennen, welcher unter UNIX- \/ Linux dazu verwendet wird, um numerische- sowie String-Ausdr\u00fccke auszuwerten.","_seopress_robots_index":"","_seopress_analysis_target_kw":"UNIX,Linux,Befehl,Befehle,Option,Optionen,Betriebssystem,Betriebssysteme,Betriebssystemen,Syntax,Beispiel,Beispiele,Tutorial,Tutorials,Profi-Tutorials,Profi-Tutorials.de,expr,Expression,Ausdruck,Auswertung,auswerten","footnotes":""},"categories":[7],"tags":[],"class_list":["post-7236","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-grundlagen"],"_links":{"self":[{"href":"https:\/\/profi-tutorials.de\/linux\/wp-json\/wp\/v2\/posts\/7236","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/profi-tutorials.de\/linux\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/profi-tutorials.de\/linux\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/profi-tutorials.de\/linux\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/profi-tutorials.de\/linux\/wp-json\/wp\/v2\/comments?post=7236"}],"version-history":[{"count":44,"href":"https:\/\/profi-tutorials.de\/linux\/wp-json\/wp\/v2\/posts\/7236\/revisions"}],"predecessor-version":[{"id":7350,"href":"https:\/\/profi-tutorials.de\/linux\/wp-json\/wp\/v2\/posts\/7236\/revisions\/7350"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/profi-tutorials.de\/linux\/wp-json\/wp\/v2\/media\/7876"}],"wp:attachment":[{"href":"https:\/\/profi-tutorials.de\/linux\/wp-json\/wp\/v2\/media?parent=7236"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/profi-tutorials.de\/linux\/wp-json\/wp\/v2\/categories?post=7236"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/profi-tutorials.de\/linux\/wp-json\/wp\/v2\/tags?post=7236"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}