diff --git a/check_cpu b/check_cpu
index d82a21933e6684acc5eb51f2a629fbd590924288..0f5bc3e4f38cb3fbaa21b5ee3d648717f40bac45 100755
--- a/check_cpu
+++ b/check_cpu
@@ -21,13 +21,14 @@
 # 2022-04-14  v1.10 <axel.hahn@iml.unibe.ch> show consuming cpu processes with top and ps
 # 2022-08-29  v1.11 <axel.hahn@iml.unibe.ch> replace pipe to prevent start of metrics section
 # 2022-08-29  v1.12 <axel.hahn@iml.unibe.ch> fix: replace pipe
+# 2023-02-13  v1.13 <axel.hahn@iml.unibe.ch> small shell fixes
 # ======================================================================
 
 
 . $(dirname $0)/inc_pluginfunctions
 
 self_APPNAME=$( basename $0 | tr [:lower:] [:upper:] )
-self_APPVERSION=1.12
+self_APPVERSION=1.13
 
 # ----------------------------------------------------------------------
 # functions
@@ -114,7 +115,7 @@ typeset -i iMinCpuUsageToShowProcesses=$(  ph.getValueWithParam 50 p "$@")
 # top -b -n 1 | head -5 | grep "^\%Cpu" >$tmpfile
 # FIX read cpu from 2nd output of top
 
-data=$( top -b -n 2 -d 0.1 | grep -i "^\%Cpu" | tail -1 | cut -f 2- -d ':' | tr ',' "\n" )
+data=$( top -b -n 2 -d 0.1 | grep -i "^%Cpu" | tail -1 | cut -f 2- -d ':' | tr ',' "\n" )
 
 cpuUser=$(   echo "$data" | grep "us" | awk '{ print $1 }' )
 cpuSystem=$( echo "$data" | grep "sy" | awk '{ print $1 }' )
@@ -160,14 +161,17 @@ echo "$plist" | grep "[0-9]" >/dev/null \
     && echo "$plist" | tr '|' ':'
 
 # v1.7: show most consuming processes if usage is > nn %
-typeset -i iUsed=$( echo $cpuNonIdle | cut -f 1 -d '.' )
+typeset -i iUsed
+iUsed=$( echo $cpuNonIdle | cut -f 1 -d '.' )
 if [ $iUsed -gt $iMinCpuUsageToShowProcesses ]; then
   echo
   echo "CPU usage is higher $iMinCpuUsageToShowProcesses percent ... showing most consuming processes"
   echo "output of top :"
   topout=$( top -b -n 1 -d 0.1 )
-  typeset -i iStart=$( echo "$topout" | grep -n "PID.*USER" | cut -f 1 -d ':' )
-  typeset -i iEnd=$iStart+5
+  typeset -i iStart
+  iStart=$( echo "$topout" | grep -n "PID.*USER" | cut -f 1 -d ':' )
+  typeset -i iEnd
+  iEnd=$iStart+5
   echo "$topout" | sed -n "${iStart},${iEnd}p" | tr '|' ':' 
   echo
   echo "output of ps:"
diff --git a/check_memory b/check_memory
index 3053da6982c87b7efbf4cc22c4f4319d29e056fa..ffd36321b76fdb979d80841e4fe490c171b0503b 100755
--- a/check_memory
+++ b/check_memory
@@ -24,13 +24,14 @@
 # 2021-03-24  v1.5  <axel.hahn@iml.unibe.ch> increase Swap critical limit 5 --> 50
 # 2022-03-09  v1.6  <axel.hahn@iml.unibe.ch> show most ram intensive processes
 # 2022-03-10  v1.7  <axel.hahn@iml.unibe.ch> add cli param -p; update help
+# 2023-02-13  v1.8  <axel.hahn@unibe.ch>     shell fixes
 # ======================================================================
 
 
-. $(dirname $0)/inc_pluginfunctions
+. "$(dirname $0)/inc_pluginfunctions"
 
 self_APPNAME=$( basename $0 | tr [:lower:] [:upper:] )
-self_APPVERSION=1.7
+self_APPVERSION=1.8
 
 # ----------------------------------------------------------------------
 # FUNCTIONS
@@ -97,30 +98,30 @@ ph.require bc
 
 # ----------------------------------------------------------------------
 # set default / override from command line params
-typeset -i iWarnLimit=$(     ph.getValueWithParam 75 w "$@")
-typeset -i iCriticalLimit=$( ph.getValueWithParam 90 c "$@")
-typeset -i iCriticalSwap=$(  ph.getValueWithParam 50 s "$@")
-typeset -i iMinRamUsageToShowProcesses=$(  ph.getValueWithParam 50 p "$@")
+typeset -i iWarnLimit;                  iWarnLimit=$(     ph.getValueWithParam 75 w "$@")
+typeset -i iCriticalLimit;              iCriticalLimit=$( ph.getValueWithParam 90 c "$@")
+typeset -i iCriticalSwap;               iCriticalSwap=$(  ph.getValueWithParam 50 s "$@")
+typeset -i iMinRamUsageToShowProcesses; iMinRamUsageToShowProcesses=$(  ph.getValueWithParam 50 p "$@")
 
 # ----------------------------------------------------------------------
 # read values
 
 # --- RAM
-typeset -i ramTotal=$(    getMemvalue MemTotal)
-typeset -i ramAvail=$(    getMemvalue MemAvailable)
-typeset -i ramUsed=$ramTotal-$ramAvail
+typeset -i ramTotal; ramTotal=$(    getMemvalue MemTotal)
+typeset -i ramAvail; ramAvail=$(    getMemvalue MemAvailable)
+typeset -i ramUsed;  ramUsed=$ramTotal-$ramAvail
 
-typeset -i ramFree=$(     getMemvalue MemFree)
-typeset -i ramBuffers=$(  getMemvalue Buffers)
-typeset -i ramCached=$(   getMemvalue Cached)
-typeset -i ramSReclaim=$( getMemvalue SReclaimable)
+typeset -i ramFree;     ramFree=$(     getMemvalue MemFree)
+typeset -i ramBuffers;  ramBuffers=$(  getMemvalue Buffers)
+typeset -i ramCached;   ramCached=$(   getMemvalue Cached)
+typeset -i ramSReclaim; ramSReclaim=$( getMemvalue SReclaimable)
 
-typeset -i ramUsage=$(echo "($ramUsed) *100 / $ramTotal " | bc)
+typeset -i ramUsage;    ramUsage=$(echo "($ramUsed) *100 / $ramTotal " | bc)
 
 # --- Swap
-typeset -i swapTotal=$(   getMemvalue SwapTotal)
-typeset -i swapFree=$(    getMemvalue SwapFree)
-typeset -i swapCached=$(  getMemvalue SwapCached)
+typeset -i swapTotal;  swapTotal=$(   getMemvalue SwapTotal)
+typeset -i swapFree;   swapFree=$(    getMemvalue SwapFree)
+typeset -i swapCached; swapCached=$(  getMemvalue SwapCached)
 
 typeset -i swapUsage=0
 if [ $swapTotal -gt 0 ]; then
@@ -147,7 +148,7 @@ fi
 
 # --- show details
 echo
-cat /proc/meminfo | egrep "^(Mem|Cache|Buffers|Swap|Slab|SReclaimable)"
+grep -E     "^(Mem|Cache|Buffers|Swap|Slab|SReclaimable)" "/proc/meminfo"
 
 
 # v1.6: show most consuming processes if usage is > nn %
diff --git a/check_proc_mem b/check_proc_mem
index f553f39aa31b9eae610fc34f313bbeee54b97f7a..91b2bbe26a082ab9e07d87cabb145204523c57ea 100755
--- a/check_proc_mem
+++ b/check_proc_mem
@@ -12,6 +12,7 @@
 # ----------------------------------------------------------------------
 # 2020-03-02  v1.0  initial version
 # 2020-03-05  v1.1  <axel.hahn@iml.unibe.ch> switch to ph.* helper functions
+# 2023-02-13  v1.2  <axel.hahn@unibe.ch>     some shell fixes
 # ======================================================================
 
 # --- tmp files for internal usage
@@ -30,19 +31,19 @@ typeset -i iCountCritical=0
 
 rm -f $tmpfile $tmpfile2 $outCritical $outWarning 2>/dev/null
 
-. `dirname $0`/inc_pluginfunctions
+. $(dirname $0)/inc_pluginfunctions
 
 # ----------------------------------------------------------------------
 # MAIN
 # ----------------------------------------------------------------------
 
 # set default / override from command line params
-typeset -i iWarnLimit=`     ph.getValueWithParam 100 w "$@"`
-typeset -i iCriticalLimit=` ph.getValueWithParam 500 c "$@"`
+typeset -i iWarnLimit=$(     ph.getValueWithParam 100 w "$@")
+typeset -i iCriticalLimit=$( ph.getValueWithParam 500 c "$@")
 
 # --- read processlist and create helper table
 ps -yle >$tmpfile
-for processname in `cat $tmpfile | awk {'print $13'} | sort -u | fgrep -v "/"`
+for processname in $(cat $tmpfile | awk {'print $13'} | sort -u | grep -Fv "/")
 do
     #echo -n "$processname; ">>$tmpfile2
     ps -ylC $processname | awk '
@@ -54,10 +55,10 @@ done
 # --- check limits
 while read line 
 do
-    typeset -i iSizeMB=`echo $line | awk '{ print $2 }' | sed "s#\..*##"`
+    typeset -i iSizeMB=$(echo $line | awk '{ print $2 }' | sed "s#\..*##")
     if [ $iSizeMB -ge $iWarnLimit ]; then
-        processname=`echo $line | awk '{ print $1 }'`
-        processcount=`echo $line | awk '{ print $3 }'`
+        processname=$(echo $line | awk '{ print $1 }')
+        processcount=$(echo $line | awk '{ print $3 }')
         if [ $iSizeMB -ge $iCriticalLimit ]; then
             iCountCritical=$iCountCritical+1
             echo "Critical: $iSizeMB MB - $processname ($processcount)" >>$outCritical
diff --git a/check_requirements b/check_requirements
new file mode 100755
index 0000000000000000000000000000000000000000..693b56109e477295b224da158f3d0570aa23d60e
--- /dev/null
+++ b/check_requirements
@@ -0,0 +1,170 @@
+#!/bin/bash
+# ======================================================================
+#
+# NAGIOS CLIENT CHECK :: check requirements
+#
+# Check if a list requirements regarding processes and network 
+# connections do exist 
+# ----------------------------------------------------------------------
+#
+# ah=axel.hahn@unibe.ch
+#
+# 2023-02-13  v1.0  ah 
+# ======================================================================
+
+
+. "$( dirname $0 )/inc_pluginfunctions"
+
+self_APPNAME=$( basename $0 | tr [:lower:] [:upper:] )
+self_APPVERSION=1.0
+
+self=$( basename $0 )
+
+typeset -i VERBOSE=0
+
+OUT=
+
+typeset -i COUNT=0
+typeset -i COUNTOK=0
+typeset -i COUNTERR=0
+
+PROCESSES=
+
+# ----------------------------------------------------------------------
+# functions
+# ----------------------------------------------------------------------
+
+# show help
+function showHelp(){
+cat <<EOF
+______________________________________________________________________
+
+$self_APPNAME 
+v$self_APPVERSION
+
+(c) Institute for Medical Education - University of Bern
+Licence: GNU GPL 3
+______________________________________________________________________
+
+Check if a list requirements regarding processes and network 
+connections do exist.
+
+The check returns OK if all given requirements match.
+
+SYNTAX:
+$(basename $0) [-h] [PARAMETERS]
+
+OPTIONS:
+
+    -h or --help         show this help.
+    -v or --verbose      show more data: processes and port numbers from
+                         /etc/services; add it as first param
+
+PARAMETERS:
+
+    -c|--connect TYPE TARGET PORT        
+                         check if connect to a server to a given port
+                         is reachable
+                         TYPE    string  one of tcp|udp
+                         TARGET  string  target host
+                         PORT    int     port number
+    -p|--process STRING  check if a process with given regex exists
+    -t|--tcp PORT        check if connect on local tcp port is reachable;
+                         This is a shortcut for -c tcp localhost [port]
+
+The parameters can be repeated multiple times. Checks will be executed in
+the given order.
+
+EXAMPLE
+
+$(basename $0) -p httpd -p mysqld -t 22 -t 80 -t 443 -t 3306
+     Check if
+     - a process httpd and a process mysqld exist
+     - localhost listens to ports 22, 80, 443 and 3306
+
+EOF
+}
+
+
+# helper function: add new line in $OUT
+function newline(){
+        OUT+="
+"
+}
+
+# check in process list
+# param  string  regex to search for in output of "ps x"
+function chkProcess(){
+        local label="$1"
+        test -z "$PROCESSES" && PROCESSES=$( ps x )
+        COUNT+=1
+        local found=$( echo "$PROCESSES" | grep -v "grep" | grep -v "$self" | grep -E "$label" )
+        if [ -z "$found" ]; then
+                COUNTERR+=1
+                ph.setStatus critical
+                OUT+="ERROR  process     $label was not found"
+        else
+                COUNTOK+=1
+                OUT+="OK     process     $label ($( echo """$found""" | wc -l ) x)"
+                test $VERBOSE -gt 0 && newline
+                test $VERBOSE -gt 0 && OUT+="$( echo """$found""" | sed 's#^#    #g')"
+                test $VERBOSE -gt 0 && newline
+        fi
+        newline
+}
+
+# check connection
+# param  string  type: one of tcp|udp
+# param  string  target: a servername eg. localhost or www.example.com
+# param  integer port number to connect
+function chkConnection(){
+        local type="$1"     # tcp | udp
+        local target="$2"   # servername
+        local port="$3"     # port number
+        
+        COUNT+=1
+        if ! echo "$type/$target/$port" | grep -E "^(tcp|udp)/[a-z][a-z0-9\.\-]*/[1-9][0-9]*$" >/dev/null 2>&1; then
+                COUNTERR+=1
+                OUT+="ERROR  syntax error detected - verify params for port check; type=$type (one of tcp|udp) target=$target (servername to connect) port=$port"
+        else
+                if (>/dev/$type/$target/$port) 2>/dev/null; then
+                        COUNTOK+=1
+                        OUT+="OK     connection  $type to $target on port $port"
+                else
+                        COUNTERR+=1
+                        ph.setStatus critical
+                        OUT+="ERROR  connection  $type to $target on port $port FAILED"
+                fi
+                test $VERBOSE -gt 0 && newline
+                test $VERBOSE -gt 0 && OUT+="$( grep """ $port/$type""" /etc/services | sed 's#^#    #g')"
+                test $VERBOSE -gt 0 && newline
+        fi
+        newline
+}
+
+# ----------------------------------------------------------------------
+# MAIN
+# ----------------------------------------------------------------------
+
+if [ "$#" -eq 0 ]; then
+        showHelp;
+        exit 1
+fi
+
+# parse params
+while [[ "$#" -gt 0 ]]; do case $1 in
+    -c|--connect)   chkConnection "$2" "$3" "$4"; shift;shift;shift;shift ;; 
+    -p|--process)   chkProcess "$2";shift 2;;
+    -h|--help)      showHelp; exit 0;;
+    -t|--tcp)       chkConnection tcp localhost "$2"; shift;shift ;; 
+    -v|--verbose)   VERBOSE=1; shift;;
+    *) echo "ERROR: Unknown parameter: $1"; showHelp; exit 1;
+esac; done
+
+ph.status "$COUNT Requirement checks - errors: $COUNTERR"
+echo
+echo "STATUS TYPE        RESULT"
+echo "$OUT"
+ph.exit
+
+# ----------------------------------------------------------------------
diff --git a/check_ssl b/check_ssl
index e9ad81095c96807c7b5ede0a0852556226b14df2..e80f5d9b5def8438eb762e09970a24ea022adaa0 100755
--- a/check_ssl
+++ b/check_ssl
@@ -16,10 +16,11 @@
 #
 # 2017-03-03  v1.0  ah,ds
 # 2020-03-05  v1.1  <axel.hahn@iml.unibe.ch> switch to ph.* helper functions
+# 2023-02-13  v1.2  <axel.hahn@unibe.ch>     some shell fixes
 # ======================================================================
 
 
-. `dirname $0`/inc_pluginfunctions
+. $(dirname $0)/inc_pluginfunctions
 
 sDomain=
 iPort=443
@@ -41,7 +42,7 @@ function showHelp(){
   echo
   echo ----- SSL Check v1.0
   echo
-  echo "SYNTAX: `basename $0` [domain] [[port]]"
+  echo "SYNTAX: $(basename $0) [domain] [[port]]"
   echo "   domain - domain to verify the ssl vertificate from (required)"
   echo "   port   - port number to connect (default: 443)"
   echo
@@ -81,7 +82,7 @@ function showHelp(){
     ph.exit
   fi
 
-  echo | openssl s_client -connect ${sDomain}:${iPort} 2>/dev/null | openssl x509 -noout -subject | fgrep ${sDomain} >/dev/null
+  echo | openssl s_client -connect ${sDomain}:${iPort} 2>/dev/null | openssl x509 -noout -subject | grep -F ${sDomain} >/dev/null
   if [ $? -ne 0 ]; then
     ph.setStatus "unknown"
     echo SORRY, openssl was unable to fetch the right certificate - this happens on multiple ssl webs - it finds
@@ -91,13 +92,13 @@ function showHelp(){
 
 # --- unix timestamps valid from .. to
 
-  dateFrom=`echo | openssl s_client -connect ${sDomain}:${iPort} 2>/dev/null | openssl x509 -noout -startdate | cut -f 2 -d "="`
-  dateTo=`echo   | openssl s_client -connect ${sDomain}:${iPort} 2>/dev/null | openssl x509 -noout -enddate   | cut -f 2 -d "="`
+  dateFrom=$(echo | openssl s_client -connect ${sDomain}:${iPort} 2>/dev/null | openssl x509 -noout -startdate | cut -f 2 -d "=")
+  dateTo=$(echo   | openssl s_client -connect ${sDomain}:${iPort} 2>/dev/null | openssl x509 -noout -enddate   | cut -f 2 -d "=")
 
-  tsFrom=`date -d "${dateFrom}" +%s`
-  tsTo=`date -d "${dateTo}" +%s`
+  tsFrom=$(date -d "${dateFrom}" +%s)
+  tsTo=$(date -d "${dateTo}" +%s)
 
-  tsNow=`date +%s`
+  tsNow=$(date +%s)
   typeset -i iDaysLeft=($tsTo-$tsNow)/60/60/24