Conditional Expression
Ein Conditional Expression ist ein unary expression oder binary expression.
Er formuliert eine Bedindung. Diese evaluiert zu TRUE oder FALSE.
Ein derartiger Expression wird i.d.R. eingesetzt in :
test if while until
Die folgenden Kombinationen können verwendet werden, um den Ausdruck zu bilden.
Datei Operatoren
Dateioptionen Prüfung
-e file Datei vorhanden
-r file Datei vorhanden und Leserechte gegeben
-w file Datei vorhanden und Schreibrechte gegeben
-x file Datei vorhanden und execute Bit gesetzt. Wenn File ein Directory
ist, dann kann ein search durchgeführt werden.
-f file Datei vorhanden und regular file
-d file Datei vorhanden und directory
-c file Datei vorhanden und character special file
-b file Datei vorhanden und block special file
-p file Datei vorhanden und named pipe (fifo)
-u file Datei vorhanden und set-user-id Bit gesetzt
-g file Datei vorhanden und set-group-id Bit gesetzt
-k file Datei vorhanden und sticky Bit gesetzt
-s file Datei vorhanden und Länge grösser als 0
-L file Datei vorhanden und ist ein symbolic-link
-O file Datei vorhanden und Eigentümer ist die effective user id
-G file Datei vorhanden und Eigentümer ist die effective group id
-S file Datei vorhanden und ist ein special file vom Type socket
-t [filedes] Datei offen und beschreibt der File-Descriptor ein Terminal
(Default ist Descriptor 1 ). filedes darf nicht weggelassen
werden, wenn [[ ... ]] verwendet wird
Existiert Datei , wenn nicht farbige Fehlermeldung
line: code : existiert Datei
1: 2: 3: 4: 5: 6: 7:
|
red="\e[47;31m" normal="\e[0m" if [ ! -e ${conf_file_cfg} ] ; then echo -e "${red}configfile ${conf_fln_cfg} not found.{$normal}" exit 1 fi
|
WennZielverzeichnis nicht existiert , dann anlegen
line: code : existiert Zielverzeichnis
1: 2: 3: 4: 5: 6: 7: 8: 9:
|
cd /data/backup targetdir=2018-02-12/test if [ ! -d ${targ_dir} ] ; then mkdir -p ${targ_dir} # ggf. auch parents anlegen chown -R root:detlef ${targ_dir} # Eigentümer für gesamten Pfad ändern chmod 775 ${targ_dir} # Zugriffsrechte für gesamten Pfad ändern fi
|
Binary File Operatoren
Sie benötigen 2 Files als Operanden
file1 -nt file2 file ist neuer als file2
file1 -ot file2 file1 ist älter als file2
file1 -ef file2 file1 ist ein anderer Name für file2 (link)
Ermittlung neuere Datei
line: code : Neuere Dateiversion ermitteln
01: 02: 03: 04: 05: 06: 07: 08: 09: 10: 11: 12:
|
if [ cond_expr_old.php -ot cond_expr.php ] ; then echo "cond_expr.php ist aktueller" ls -l cond_expr*.php fi
cond_expr.php ist aktueller -r--r--r-- 1 detlef detlef 4463 Jul 24 2007 cond_expr_old.php -rw-r--r-- 1 detlef detlef 8871 Feb 14 04:11 cond_expr.php
(die _old Version ist aus 2007 d.h. mehr als 10 Jahre älter)
|
unary Operatoren
-z s1 hat der String s1 die Länge 0 hat (Leerstring)
-n s1 ist die Länge des Strings grösser 0 .
-o option ist option gesetzt
Stringoperatoren
(Verwendung in test [ .. ] und [[ ... ]]
s1 = s2 String s1 gleich String s2 ist
s1 != s2 String s1 ungleich String s2 ist
Stringoperatoren (Verwendung nur in [[ ... ]] möglich )
s1 = pattern String s1 gleich pattern
s1 != pattern String s1 ungleich pattern
s1 < s2 String s1 kleiner als s2 (in ASCII -Sequenz)
s1 > s2 String s1 größer als s2 (in ASCII -Sequenz)
Numerische Operatoren
Für den Vergleich von numerischen Werten sollten immer die
entsprechenden Options verwendet werden und
nicht < <= = != >= >
da führende Nullen das Ergebnis verfälschen könnten.
n1 -eq n2 expr1 gleich expr2
n1 -ge n2 expr1 größer/gleich expr2
n1 -gt n2 expr1 größer als expr2
n1 -le n2 expr1 kleiner/gleich expr2
n1 -lt n2 expr1 kleiner als expr2
n1 -ne n2 expr1 ungleich expr2
Ist der ausführende User root?
line: code : Ist User root ?
1: 2: 3: 4: 5: 6: 7:
|
uid=$(id -u) # uid ermitteln if [ ${uid} -ne 0 ] ; then # ist nicht root ? show "Hallo ${USER}, nur ROOT darf Backup starten" exit fi
|