expr(1) expr(1)
NAME
expr - Ausdrücke auswerten (evaluate expression)
SYNTAX
expr ausdruck ...
BESCHREIBUNG
expr interpretiert die in der Kommandozeile angegebenen Argumente als
Ausdrücke und wertet sie nacheinander aus. Das Ergebnis der Auswertung
wird auf die Standardausgabe ausgegeben.
Mit expr können Sie z. B. ganzzahlige Berechnungen im Bereich
-9223372036854775808 bis 9223372036854775807 durchführen oder Zeichen-
ketten miteinander vergleichen.
ARGUMENTE
ausdruck
ausdruck besteht entweder nur aus einem Operanden oder aus zwei
Operanden, die mit einem Operator verknüpft sind. Als Operanden
können Sie beliebige Zeichenketten angeben. Zeichenketten, die
nur aus den Ziffern 0 bis 9 bestehen, interpretiert expr als
ganze Zahlen. Durch ein vorangestelltes Minuszeichen - können Sie
ganze Zahlen als negative Zahlen kennzeichnen.
Operanden und Operatoren werden durch Leer- oder Tabulatorzeichen
voneinander getrennt. Wenn Sie eine Zeichenkette als Operand
angeben wollen, die Leer- oder Tabulatorzeichen enthält, müssen
Sie deshalb entweder die ganze Zeichenkette oder die Leer- oder
Tabulatorzeichen in Hochkommata '...' oder Anführungszeichen
"..." einschließen, damit diese nicht als Trennzeichen interpre-
tiert werden. Sonderzeichen der Shell müssen Sie in Hochkommata
'...' oder Anführungszeichen "..." einschließen oder mit einem
Gegenschrägstrich \ entwerten [siehe specialchar(5)].
Wenn ausdruck nur aus einem Operanden besteht, ist das Ergebnis
der Auswertung dieser Operand selber.
Wie zwei Operanden miteinander verknüpft werden können, ist im
folgenden beschrieben. Dabei sind die Operatoren nach aufsteigen-
dem Vorrang geordnet, Operatoren mit gleichem Vorrang sind in
geschweiften Klammern {...} zusammengefaßt.
Das Ergebnis 0 steht für den Wert 0, nicht für eine leere Zei-
chenkette.
op1 | op2
Wenn die Auswertung von op1 weder die leere Zeichenkette
noch 0 liefert, ist das Ergebnis op1; sonst op2.
op1 & op2
Wenn weder die Auswertung von op1 noch die von op2 die leere
Zeichenkette oder 0 liefert, ist das Ergebnis op1; sonst 0.
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
expr(1) expr(1)
op1 rel op2
rel kann einer der folgenden Vergleichsoperatoren sein:
< kleiner als
<= kleiner als oder gleich
= gleich
>= größer als oder gleich
> größer als
!= ungleich
Wenn die Bedingung erfüllt ist, ist das Ergebnis des Ver-
gleichs 1. Wenn die Bedingung nicht erfüllt ist, ist das
Ergebnis des Vergleichs 0. Wenn sowohl op1 als auch op2
ganze Zahlen sind, werden sie numerisch miteinander vergli-
chen. Ansonsten werden sie als Zeichenketten lexikalisch
miteinander verglichen.
op1 {+ -} op2
Wenn op1 und op2 ganze Zahlen sind, ist das Ergebnis die
Summe bzw. Differenz der beiden Zahlen. Wenn eines der Argu-
mente keine ganze Zahl ist, gibt expr eine Fehlermeldung aus
(siehe FEHLERMELDUNGEN).
op1 {* / %} op2
Wenn op1 und op2 ganze Zahlen sind, ist das Ergebnis das
Ergebnis der angegebenen arithmetischen Operation:
* Multiplikation
/ (ganzzahlige) Division
% Rest bei (ganzzahliger) Division
Wenn eines der Argumente keine ganze Zahl ist, gibt expr
eine Fehlermeldung aus (siehe FEHLERMELDUNGEN).
op1 : op2
Die Zeichenketten op1 und op2 werden miteinander verglichen,
beginnend mit dem ersten Zeichen in jeder Zeichenkette und
endend mit dem letzten Zeichen in op2. op2 können Sie in
Form eines einfachen regulären Ausdrucks [siehe
expressions(5)] angeben. Wenn op1 und op2 vom ersten Zeichen
in jeder Zeichenkette bis zum letzten Zeichen in op2 übe-
reinstimmen, wird normalerweise die Anzahl der übereinstim-
menden Zeichen ausgegeben. Wenn Sie für op2 jedoch das
Muster \(...\) verwenden, wird der Teil von op1 ausgegeben,
der zu diesem Muster paßt (siehe Beispiele 7 und 8).
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98
expr(1) expr(1)
match op1 op2
Gleiche Bedeutung wie op1 : op2.
(...)
Durch Setzen runder Klammern (...) können Sie die Auswer-
tungsreihenfolge verändern. Die in runden Klammern zusammen-
gefaßten Ausdrücke werden zunächst ausgewertet, auch wenn
der Vorrang der Operatoren etwas anderes aussagt.
ENDESTATUS
0 Ausdruck ist nicht fehlerhaft und die Auswertung liefert weder 0
noch die leere Zeichenkette.
1 Die Auswertung des Ausdrucks liefert entweder 0 oder die leere
Zeichenkette.
2 Ausdruck ist fehlerhaft oder Division durch 0
>2 Fehler
FEHLERMELDUNGEN
expr: non-numeric argument
Bei den arithmetischen Operatoren +, -, *, /, % dürfen Sie nur ganz-
zahlige Operanden angeben.
expr: division by zero
Sie haben durch 0 dividiert.
expr: syntax error
Sie haben einen Syntaxfehler beim Aufruf von expr gemacht, z. B. Ope-
randen und Operatoren nicht durch Leer- oder Tabulatorzeichen
getrennt.
expr: RE error
Sie haben beim Mustervergleichsoperator : den zweiten Operanden nicht
in korrekter Form als einfachen regulären Ausdruck angegeben.
INTERNATIONALE UMGEBUNG
Die Umgebungsvariable LCMESSAGES bestimmt die Sprache der Meldungs-
texte.
Seite 3 Reliant UNIX 5.44 Gedruckt 11/98
expr(1) expr(1)
In geklammerten regulären Ausdrücken bestimmt die Umgebungsvariable
LCCOLLATE die Bedeutung von Zeichenbereichen, Äquivalenzklassen und
Zeicheneinheiten, die Umgebungsvariable LCCTYPE die Bedeutung von
Zeichenklassen. LCCOLLATE bestimmt zudem das Verhalten von
Vergleichsoperatoren beim Vergleich von Zeichenketten. Wenn z. B. die
Buchstaben a und ä in einer Äquivalenzklasse sind, ergibt der Ausdruck
expr $var:[[=a=]]
den Wert 1, wenn der Wert der Variablen a oder ä ist.
Wenn LCMESSAGES, LCCOLLATE oder LCCTYPE nicht oder als leere Zei-
chenkette definiert ist, wird der Wert von LANG als Standardwert für
die jeweils nicht gesetzte oder leere Variable herangezogen. Ist auch
LANG nicht oder als leere Zeichenkette definiert, verhält sich das
System so, als wäre es nicht internationalisiert.
Hat eine der Variablen für die internationale Umgebung einen ungülti-
gen Wert, verhält sich das System so, als wäre keine Variable
gesetzt.Die Umgebungsvariable LCALL bestimmt die gesamte internatio-
nale Umgebung. LCALL hat Vorrang vor allen anderen Umgebungsvariablen
im Bereich der Internationalisierung.
BEISPIELE
Beispiel 1
Einfache Rechnung:
$ expr 21 + 9 '*' 2 / 6
24
Beispiel 2
Im folgenden Beispiel wird zu der Variablen a der Wert 1 addiert.
$ echo $a
3
$ a=`expr $a + 1`
$ echo $a
4
Beispiel 3
Im folgenden Beispiel werden zwei Umgebungsvariablen verglichen.
$ echo $op1 $op2
text1 text2
$ expr $op1 = $op2
0
Seite 4 Reliant UNIX 5.44 Gedruckt 11/98
expr(1) expr(1)
Problematisch wird der Vergleich, wenn der Wert einer Variablen einen
Operator für expr darstellt. Das Problem kann durch Verbindung der
Variablen mit einem unproblematischen Zeichen gelöst werden.
$ echo $op1 $op2
= =
$ expr $op1 = $op2
expr: syntax error
$ expr X$op1 = X$op2
1
Beispiel 4
Ausgabe der Anzahl der Zeichen in VAR:
$ echo $VAR
Hallo
$ expr $VAR : '.*'
5
Beispiel 5
Vergleich zweier Zeichenketten:
$ expr mausoleum : maus
4
Beispiel 6
Vergleich zweier Zeichenketten, wobei das Muster als regulärer Aus-
druck angegeben wird. Das Zeichen Dach ^ ist ein Sonderzeichen für die
Shell und muß deshalb durch einen Gegenschrägstrich \ entwertet wer-
den.
$ expr abc : [\^d-f]
1
Beispiel 7
In der Variablen a ist der Pfadname einer Datei abgelegt, etwa
/usr/anna/parnassum/infinitum. Um den einfachen Dateinamen, also
infinitum, auszugeben, geben Sie ein:
$ expr $a : '.*/\(.*\)'
infinitum
Beispiel 8
Wenn in der Variablen a entweder der Pfadname oder der einfache Datei-
name einer Datei abgelegt ist, erhalten Sie den einfachen Dateinamen
auf folgende Weise:
Seite 5 Reliant UNIX 5.44 Gedruckt 11/98
expr(1) expr(1)
$ expr $a : '.*/\(.*\)' \| $a
HINWEISE
Etliche der Operatoren sind zugleich Kontrolloperatoren der Shell, so
daß sie in der Kommandozeile maskiert werden müssen.
Jeder Ausdruck ist aus einzelnen Argumenten zusammengesetzt, die daher
durch Leerzeichen getrennt sein müssen.
Beispiele:
__________________________________________
| Ungültig | Gültig |
|_________________|_______________________|
| expr 1+2 | expr 1 + 2 |
| expr "1 + 2" | expr 1 + 2 |
| expr 1 + (2 * 3)| expr 1 + \( 2 \* 3 \)|
|_________________|_______________________|
SIEHE AUCH
ed(1), sh(1).
Seite 6 Reliant UNIX 5.44 Gedruckt 11/98