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
01:
02:
03:
04:
05:
06:
07:
    red="\e[47;31m"
    
normal="\e[0m"
    
if [ ! -${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
01:
02:
03:
04:
05:
06:
07:
08:
09:
 
    cd 
/data/backup
    targetdir
=2018-02-12/test
    
if [ ! -${targ_dir} ] ; then
        mkdir 
-${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
001:
002:
003:
004:
005:
006:
007:
008:
009:
010:
011:
012:
 
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.hmehr 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 ?
01:
02:
03:
04:
05:
06:
07:
 
uid
=$(id -u)                        # uid ermitteln
if [ ${uid} -ne 0 ] ; then            # ist nicht root ?
   
show  "Hallo ${USER},  nur ROOT darf Backup starten"
   
exit
fi