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:
    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:
 
    cd /data/backup
    targetdir=2018-02-12/test
    if [ ! -d ${targ_dir} ] ; then
        mkdir -p -m 755 ${targ_dir} # ggf. auch parents anlegen
# -m 775 setzt auch gleich die Permission Bits, ersetzt damit
#        chmod 775   ${targ_dir}        # Zugriffsrechte für gesamten Pfad ändern  
    fi
    chown -R root:detlef ${targ_dir} # Eigentümer für gesamten Pfad ändern
    #             Nur root darf diesen chmod absetzen



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
1:
 
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:
 
uid=$(id -u)                        # uid ermitteln
if [ ${uid} -ne 0 ] ; then            # ist nicht root ?
   show  "Hallo ${USER},  nur ROOT darf Backup starten"
   exit
fi