IMAP/POP3 Server für lokale System Benutzer

Manchmal möchte man nur ein- oder zwei mailboxen auf einem Linux System auch über einen lokalen IMAP/POP3 Server abrufbar machen (z.B. für ein Ticketing System).

In diesem Fall braucht man kein komplexes Mailserver-Setup zu machen. Beim RHEL/CentOS dovecot Paket reicht es ein paar Zeilen in der dovecote-Konfiguration zu erstellen.

Continue reading IMAP/POP3 Server für lokale System Benutzer

Parameter im shell-script auswerten mit getopts

Es ist zwar durchaus möglich mit der "alt bewährten Methode" $1-$9 in shell scripts Kommandozeilen zu machen, allerdings ist das eher umständlich.

Mit der Funktion "getopts" hat jedoch zumindest die bash-shell ein sehr handliches Werzeug dafür eingebaut!

Dabei sieht die synatx so aus:

getopts Optionen Variable [Argumente]

Dabei werden alle Optionen die man Abfragen will mit einem ":" davor und dahinter hingeschrieben, z.B.:

getopts :a:

Möchte man schalter/flags verwenden, die keinen Wert haben, lässt man eingach den ":" hinter der Option weg:

getopts :a

Und ein praktisches Beispiel:

#!/bin/bash
# Demonstriert getopt
while getopts abc:D: opt
do
   case $opt in
       a) echo "Option a";;
       b) echo "Option b";;
       c) echo "Option c : ($OPTARG)";;
       D) echo "Option D : ($OPTARG)";;
   esac
done

Und so wird das dann aufgerufen:

user@host > ./test.sh -a
Option a
 
user@host > ./test.sh -b
Option b
 
user@host > ./test.sh -c
./agetopter: option requires an argument -- c
 
user@host > ./test.sh -c Hallo
Option c : (Hallo)

Quellen

getopt manpage
getopts – Kommandozeilenoptionen auswerten

Script-Pfad ermitteln

Um in einem script den Pfad zum Verzeichnis von dem das Script aufgerufen wird gibt es diese Funktion:

<span class="keys"> ${BASH_VERSINFO[0]} -le 2 </span> && echo 'The BASH_SOURCE array variable is only available for Bash 3.0 and higher!' && exit 1
if [ "${BASH_SOURCE[0]}" != "${0}" ]; then
  # echo "script ${BASH_SOURCE[0]} is running sourced ..."
 
  SCRIPT_PATH="$(cd $(dirname "${BASH_SOURCE[0]}"); pwd -P)"
else
 
  # echo "script ${0} is NOT running sourced ..."
  SCRIPT_PATH="$(cd $(dirname "${0}"); pwd -P)"
fi

Falls man nun Beispielsweise ein script in /home/user/bin/test.sh hat und die obige Funktion in diesem Script aufruft zeigt $SCRIPT_PATH immer auf: /home/user/bin, egal ob man dieses Script im bin-Verzeichnis aufruft (./test.sh) oder absolut (/home/user/bin/test.sh).

Dies ist besonders nützlich, wenn man innerhalb des scriptes weitere scripts im selben Verzeichnis wie das script aufruft und dies nicht mit absoluter Pfadangabe machen will (da sich das script-Verzeichnis verschieben könnte).