[[ $- != *i* ]] && return

export HISTCONTROL=ignoreboth:erasedups
export HISTFILESIZE=20000
export HISTSIZE=5000
export HISTTIMEFORMAT="%F %T "
export HISTIGNORE="free*:exit:clear:man*:mc*:history*:set*:export*:alias*:source*:declare*:__*"
export HOMEDIR=/home/andre

alias ll='ls -haltr'
alias ppm="sudo perl -MCPAN -e 'shell'"
alias RDPC='RDP 10.101.0.236'

alias ssh_h='egrep "^# " .ssh/config'
alias ßh=ssh
alias TS='ts "%Y-%m-%d %H:%M:%S"'
alias clear_history="history -c && history -w && clear"
alias extip='echo $(curl --connect-timeout 5 -s https://ipinfo.io/ip)'
alias grep='grep --line-buffered'
alias egrep='egrep --line-buffered'
alias mysudo='sudo bash --rcfile $HOMEDIR/.bashrc'

if [ -x /usr/bin/dircolors ]; then
   test -r $HOMEDIR/.dircolors && eval "$(dircolors -b $HOMEDIR/.dircolors)" || eval "$(dircolors -b)"
   export GREP_COLORS='1;37;41'

   alias ls='ls --color=auto'
   alias ll='ls -haltr --color=auto'

   alias grep='grep --line-buffered --color=auto'
   alias grepv='grep --line-buffered -v grep | grep --line-buffered --color=auto'

   alias egrep='egrep --line-buffered --color=auto'
   alias egrepv='grep --line-buffered -v grep | egrep --line-buffered --color=auto'
fi

export SSHUSER=ageissler
export SSHPASS=G0ttAmH3rd
export GPGKEY=13FAA6FC
export MYSERVER=vesta.agserver.de

export EDITOR=vi
# export PERL_MB_OPT="--install_base \"$HOMEDIR/perl5\""
# export PERL_MM_OPT="INSTALL_BASE=$HOMEDIR/perl5"
export PERL_MM_USE_DEFAULT=1
export PATH=$PATH:.:~:/install/:$HOMEDIR/scripts/:$HOMEDIR/bin/:
export PROMPT_DIRTRIM=10

color_prompt=yes

# $- Options set for shell
if echo "$-" | grep i > /dev/null; then
 ip=`extip`
fi

#    \n                                  grün       username@hostname dflt :blau workingdir   dflt         \n ip  \n RET: grün oder rot je nach ret, ret gelb          zeit dflt        blau $ dflt
#PS1='\e[7\e[2A\e[16C $? \e[8 \n${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\r\u@\h\[\033[00m\]:\[\033[01;34m\]\w \[\033[00m\] \n $ip \n RET:\[\033[01;$(($?==0?32:91))m\]$? \[\033[01;33m\]\t\[\033[00m\] \[\033[01;34m\]\$\[\033[00m\]     '
#export PS1="\nTime \e[0;32m\A\e[0m Date \e[0;32m\d\e[0m Rev \e[0;31m$(cd /home/rancid/var/rancid/network/configs ; svn info | grep Revision | awk '{print $2}')\e[0m   \n\e[0;33m\u\e[0m@\e[1;32m\h\e[0m:\e[0;34m\w\e[0m   \n\$ "
PSCHR=$(printf "%s '" ' ^ ° ! " $ % / ( ) [ ] { } = ? \ ` # + ~ < > | @ , ; . : - _ *')
PS1='\n$PSCHR\n${debian_chroot:+($debian_chroot)}\[\033[01;15m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\n \[\033[01;33m\]$ip\[\033[00m\]\n \[\033[01;15m\]RET:\[\033[01;$(($?==0?32:91))m\]$? \[\033[01;33m\]\t\[\033[00m\] \[\033[01;34m\]\$\[\033[00m\] '

shopt -s histappend
shopt -s histverify
shopt -s autocd
shopt -s cdspell
shopt -s cmdhist
shopt -s dotglob
shopt -s interactive_comments
shopt -s expand_aliases
shopt -s extglob

cy-ssh() {
   set -euo pipefail

   if [ $# -lt 1 ]; then
      echo "Usage: $0 <host> [ssh-options...]"
      return 0
   fi

   HOST="$1"
   shift || true

   # Defaults
   DOMAIN1="conadm.de"
   DOMAIN2="conacc.local"
   SSH_HOSTNAME="finance"
   SSH_PROXY=""



   ###############################################################################
   # Gemeinsame CyberArk-Auth-Optionen
   ###############################################################################
   CYBERARK_USER="ageissler@ageissler@${HOST}"
   CYBERARK_AUTH_OPTS="-o PreferredAuthentications=publickey,keyboard-interactive,password"
   

   ###############################################################################
   # Host conlx*
   ###############################################################################
   if [[ "$HOST" == con* ]]; then
      CYBERARK_USER="ageissler@root@${HOST}"
   fi

   if [[ "$HOST" == conlxvmhub* ]]; then
      SSH_HOSTNAME="hosting"
   fi


   ###############################################################################
   # Host switch-catalyst-* switch-nexus-* switch-fibre-* router-*
   ###############################################################################
   if [[ "$HOST" == switch-catalyst-* \
      || "$HOST" == switch-nexus-* \
      || "$HOST" == switch-fibre-* \
      || "$HOST" == router-* ]]; then

      SSH_HOSTNAME="finance"
   fi

   ###############################################################################
   # Host switch-admin-*
   ###############################################################################
   if [[ "$HOST" == switch-admin-* ]]; then
      SSH_HOSTNAME="admin"
   fi

   ###############################################################################
   # Host router-swx-*
   ###############################################################################
   if [[ "$HOST" == router-swx-* ]]; then
      SSH_HOSTNAME="admin"
   fi

   # Prüfe ob Hostname auflösbar ist
   if ! getent hosts "$SSH_HOSTNAME" >/dev/null 2>&1 ; then
      # Versuche alternativen Hostname
      SSH_HOSTNAME_DOM="${SSH_HOSTNAME}.${DOMAIN1}"
      if ! getent hosts "$SSH_HOSTNAME_DOM" >/dev/null 2>&1; then
         SSH_HOSTNAME_DOM="${SSH_HOSTNAME}.${DOMAIN2}"
         if ! getent hosts "$SSH_HOSTNAME_DOM" >/dev/null 2>&1; then
            echo "
! cy-ssh Fehler: \"${SSH_HOSTNAME}\" und \"${SSH_HOSTNAME}.${DOMAIN1}\" und \"${SSH_HOSTNAME}.${DOMAIN2}\" nicht auflösbar" >&2
            return 0
         fi
      fi
      SSH_HOSTNAME=$SSH_HOSTNAME_DOM   
   fi

   echo "Nutze $SSH_HOSTNAME"
   
   SSH_USER="$CYBERARK_USER"
   SSH_AUTH_OPTS="$CYBERARK_AUTH_OPTS"

   ###############################################################################
   # SSH-Command bauen
   ###############################################################################
   CMD=(ssh)

   if [ -n "$SSH_USER" ]; then
      CMD+=(-l "$SSH_USER")
   fi
   
   CMD+=(-o ForwardX11=no -o ForwardX11Trusted=no)
   CMD+=(-o HostName="$SSH_HOSTNAME")

   if [ -n "$SSH_PROXY" ]; then
      CMD+=(-o ProxyCommand="$SSH_PROXY")
   fi

   if [ -n "$SSH_AUTH_OPTS" ]; then
      CMD+=($SSH_AUTH_OPTS)
   fi

   CMD+=("$SSH_HOSTNAME" "$@")

   ###############################################################################
   # Optional Debug
   ###############################################################################
   echo "DEBUG: ${CMD[*]}" >&2
   set +e
   "${CMD[@]}"
   
   local exit_code=$?
   if [ $exit_code -ne 0 ]; then
      echo "
! cy-ssh Fehler: SSH-Verbindung fehlgeschlagen."
   fi
   return 0
}

RDP() {
   if [ "$1" == "" ]
   then
      echo 'call with RDP <IP>'
   else
      xfreerdp3 /cert:ignore /d:conacc /u:ageissler /p:Jaron2016! /dynamic-resolution /v:$1 &
      #xfreerdp /cert:ignore '/u:conacc\ageissler' '/p:FranziskaR439!' /dynamic-resolution /v:$1 &
   fi
}

prompt_confirm() {
  while true; do
    read -r -n 1 -p "${1:-Weiter?} [j/n]: " REPLY
    case $REPLY in
      [jJ]) echo ; return 0 ;;
      [nN]) echo ; return 1 ;;
      *) printf " \033[31m %s \n\033[0m" "ungültige Eingabe"
    esac 
  done  
}
# prompt_confirm "Overwrite File?" || return 0

conv_owi() {
    IMG=$1
    PNG=${IMG}.png

    exiftool $IMG -Artist=vkue -Copyright=vkue

    MAXMB=$2
    if [ "$MAXMB" == "" ]
    then
        MAXMB=10
    fi

    MAXSIZE=$(expr $MAXMB \* 1000 \* 1000)
    if [ -f $PNG ]
    then
        SIZE=$(stat --printf="%s" $PNG)
    fi
    
    if [ ! -f $PNG ] || [[ $SIZE -gt $MAXSIZE ]]
    then
        RATE=100
            RDIFF=1
        SIZE=$(expr $MAXSIZE + 1)

        while [[ $SIZE -gt $MAXSIZE ]]
        do
            RATE=$(expr $RATE - $RDIFF)
            convert -resize ${RATE}% $IMG $PNG
            SIZE=$(stat --printf="%s" $PNG)
            echo RATE $RATE MAX $MAXSIZE SIZE $SIZE
            FAK=$(expr $SIZE \* 100 / $MAXSIZE)
            echo $FAK
            if [[ $FAK -gt 101 ]]; then RDIFF=2; fi
            if [[ $FAK -gt 106 ]]; then RDIFF=4; fi
            if [[ $FAK -gt 111 ]]; then RDIFF=8; fi
            if [[ $FAK -gt 120 ]]; then RDIFF=12; fi
            if [[ $FAK -gt 140 ]]; then RDIFF=17; fi
            if [[ $FAK -gt 160 ]]; then RDIFF=23; fi
            if [[ $FAK -gt 180 ]]; then RDIFF=30; fi
            if [[ $FAK -gt 200 ]]; then RDIFF=38; fi
            if [[ $FAK -gt 220 ]]; then RDIFF=47; fi
        done
    fi
}

arg_h() {
 echo "

Aliases"    
cat $HOMEDIR/.bashrc | egrep "alias " | grep -v "#alias" | awk -F'=' '{print $1}' | awk '{print $2}' | sort | uniq | tr "\n" " "

echo "

Funktionen"
cat $HOMEDIR/.bashrc | grep "() {" | grep -v cat | tr -d "{" | sort | uniq | tr -d "\n"

echo "

wetter
    zeigt Wettervorhersagen an
wi
    startet vi und erstellt zuvor Sicherungsdatei

install_ssh_keypair_files
    speichert Schlüsselpaar in $HOMEDIR/.ssh/id_ed25519[.pub]

install_ssh_authorized_key [|user] hängt pub-key an [~]|[/home/user]/.ssh/authorized_keys an

ssh_env
    1. versucht zunächst key basierte anmeldung einzurichten
    2. copy der bash aufs zielsystem $HOMEDIR/.bash_profile
    3. ssh per key
    4. bei erfolg wird beim anmelden die zuvor angelegte datei ausgeführt und
       durch einen rm am Ende dieses bashrc gelöscht

"
}

C_BLACK="\e[38;5;0m"
C_RED="\e[38;5;1m"
C_GREEN="\e[38;5;2m"
C_YELLOW="\e[38;5;3m"
C_BLUE="\e[38;5;4m"
C_PURPLE="\e[38;5;5m"
C_CYAN="\e[38;5;6m"
C_LIGHTGRAY="\e[38;5;7m"
C_GRAY="\e[38;5;8m"
C_PEACH="\e[38;5;9m"
C_LIGHTGREEN="\e[38;5;10m"
C_LIGHTYELLOW="\e[38;5;11m"
C_LIGHTBLUE="\e[38;5;12m"
C_PINK="\e[38;5;13m"
C_LIGHTCYAN="\e[38;5;14m"
C_WHITE="\e[38;5;15m"
C_NO="\e[0;00m"

BG_BLACK="\e[48;5;0m"
BG_RED="\e[48;5;1m"
BG_GREEN="\e[48;5;2m"
BG_YELLOW="\e[48;5;3m"
BG_BLUE="\e[48;5;4m"
BG_PURPLE="\e[48;5;5m"
BG_CYAN="\e[48;5;6m"
BG_LIGHTGRAY="\e[48;5;7m"
BG_GRAY="\e[48;5;8m"
BG_PEACH="\e[48;5;9m"
BG_LIGHTGREEN="\e[48;5;10m"
BG_LIGHTYELLOW="\e[48;5;11m"
BG_LIGHTBLUE="\e[48;5;12m"
BG_PINK="\e[48;5;13m"
BG_LIGHTCYAN="\e[48;5;14m"
BG_WHITE="\e[48;5;15m"
BG_NO="\e[0;00m"

Insta360Pictures() {
   for instafile in `ls  | egrep  -i "^[0-9a-z]+_[0-9]+\.[0-9]+_[0-9]+\.jp[e]*g"`
   do
      timestamp=$(echo "$instafile" | sed 's/.*_\([0-9]*\)\.jpg/\1/')
      timestamp_sec=$(($timestamp / 1000))
      # Datum formatieren und in EXIF schreiben
      #exiftool -overwrite_original -DateTimeOriginal="$(date -d @${timestamp_sec} '+%Y:%m:%d %H:%M:%S')" $instafile
      mv $instafile I${timestamp}.jpg
   done
}

AddGPSToPicture() {
   J=$1
   # höhe des bildes ermitteln
   H=$(exiftool -csv -ImageHeight $J | grep -v Height | awk -F',' '{print $2}')
   # 2% der Bildhöhe für die Schrift
   FS=$(bc -l <<< "$H*2/100" | awk -F. '{print $1}')
   FS2=$(bc -l <<< "$FS+25" | awk -F. '{print $1}')
   POSITION=$(exiftool -m -p '$GPSPosition' "$J" -c \"%+.5f\")
   if [ -z "$POSITION" ]; then
      echo Position fehlt
      return
   fi
   exiftool -overwrite_original -exif:gpslatituderef=N -exif:gpslongituderef=E "$J"
   convert $J -gravity North -pointsize $FS -font Courier-10-Pitch-Regular -fill white -undercolor black -annotate +0+$FS2 "Position $POSITION" $J;
}

AddGPSToPictures() {
   for file in "$@"; do
      AddGPSToPicture $file
   done
}

AddTimestampToPicture() {
   J=$1
   # höhe des bildes ermitteln
   H=$(exiftool -csv -ImageHeight $J | grep -v Height | awk -F',' '{print $2}')

   # 2% der Bildhöhe für die Schrift
   FS=$(bc -l <<< "$H*2/100" | awk -F. '{print $1}')

   # datetime string aus bild holen
   DATETIME=$(exiftool -m -p '$FileModifyDate' "$J" || exiftool -m -p '$ModifyDate'  "$J" )

   DATETIMEORIG=$(exiftool -m -p '$DateTimeOriginal' "$J")
   DATETIMECREATE=$(exiftool -m -p '$CreateDate' "$J")

   DATETIMEFILEMOD=$(exiftool -m -p '$FileModifyDate' "$J")
   DATETIMEMOD=$(exiftool -m -p '$ModifyDate' "$J")

   DATETIME=$DATETIMECREATE
   DATE=$(echo $DATETIME | awk -F' ' '{print $1}')
   TIME=$(echo $DATETIME | awk -F' ' '{print $2}')

   # date weiter aufspalten nach year, month und day
   YEAR=$(echo $DATE | awk -F':' '{print $1}')
   MONTH=$(echo $DATE | awk -F':' '{print $2}')
   DAY=$(echo $DATE | awk -F':' '{print $3}')

   # month durch monatsnamen ersetzen
   if [ "$MONTH" == "01" ]; then MONTH="Januar"; fi
   if [ "$MONTH" == "02" ]; then MONTH="Februar"; fi
   if [ "$MONTH" == "03" ]; then MONTH="März"; fi
   if [ "$MONTH" == "04" ]; then MONTH="April"; fi
   if [ "$MONTH" == "05" ]; then MONTH="Mai"; fi
   if [ "$MONTH" == "06" ]; then MONTH="Juni"; fi
   if [ "$MONTH" == "07" ]; then MONTH="Juli"; fi
   if [ "$MONTH" == "08" ]; then MONTH="August"; fi
   if [ "$MONTH" == "09" ]; then MONTH="September"; fi
   if [ "$MONTH" == "10" ]; then MONTH="Oktober"; fi
   if [ "$MONTH" == "11" ]; then MONTH="November"; fi
   if [ "$MONTH" == "12" ]; then MONTH="Dezember"; fi
   convert $J -gravity North -pointsize $FS -font Courier-10-Pitch-Regular -fill white -undercolor black -annotate +0+0 "Datum $DAY. $MONTH $YEAR Zeit $TIME" $J;
}

AddTimestampToPictures() {
   for file in "$@"; do
      AddTimestampToPicture $file
   done   
}

AddTimeDateToPicturesMenu() {
   LOG="/var/log/AddTimeDateToPicturesMenu.log"
   date > $LOG
   echo $@ >> $LOG

   D=$(perl -e '$s=$ARGV[0];@a=$s=~/([a-z0-9-._\/ ]*?)([a-z0-9-._]*) +\//i;
$s=~s/$a[0]//g;
print "$a[0]";
' "$@")
    cd "$D"
    P=$(pwd)
    echo "P $P" >> $LOG

   F=$(perl -e '$s=$ARGV[0];@a=$s=~/([a-z0-9-._\/ ]*?)([a-z0-9-._]*) +\//i;
$s=~s/$a[0]//g;
print "$s";
' "$@")
   echo "F $F" >> $LOG

   for J in `echo $F`;
   do
      # höhe des bildes ermitteln
      H=$(exiftool -csv -ImageHeight $J | grep -v Height | awk -F',' '{print $2}')

      # 2% der Bildhöhe für die Schrift
      FS=$(bc -l <<< "$H*2/100" | awk -F. '{print $1}')

      # datetime string aus bild holen
      DATETIME=$(exiftool -m -p '$FileModifyDate' "$J" || exiftool -m -p '$ModifyDate'  "$J" )

      DATETIMEORIG=$(exiftool -m -p '$DateTimeOriginal' "$J")
      DATETIMECREATE=$(exiftool -m -p '$CreateDate' "$J")

      DATETIMEFILEMOD=$(exiftool -m -p '$FileModifyDate' "$J")
      DATETIMEMOD=$(exiftool -m -p '$ModifyDate' "$J")

      DATETIME=$DATETIMEMOD
      echo "$J $H $DATETIME" >> $LOG

      POSITION=$(exiftool -m -p '$GPSPosition' "$J" -c \"%+.6f\")
      if [ -z "$POSITION" ]; then
         echo Position fehlt
         return
      fi
      echo "$J $POSITION" >> $LOG
      exiftool -overwrite_original -exif:gpslatituderef=N -exif:gpslongituderef=E "$J"

      # aufspalten nach date und time
      DATE=$(echo $DATETIME | awk -F' ' '{print $1}')
      TIME=$(echo $DATETIME | awk -F' ' '{print $2}')

      # date weiter aufspalten nach year, month und day
      YEAR=$(echo $DATE | awk -F':' '{print $1}')
      MONTH=$(echo $DATE | awk -F':' '{print $2}')
      DAY=$(echo $DATE | awk -F':' '{print $3}')

      # month durch monatsnamen ersetzen
      if [ "$MONTH" == "01" ]; then MONTH="Januar"; fi
      if [ "$MONTH" == "02" ]; then MONTH="Februar"; fi
      if [ "$MONTH" == "03" ]; then MONTH="März"; fi
      if [ "$MONTH" == "04" ]; then MONTH="April"; fi
      if [ "$MONTH" == "05" ]; then MONTH="Mai"; fi
      if [ "$MONTH" == "06" ]; then MONTH="Juni"; fi
      if [ "$MONTH" == "07" ]; then MONTH="Juli"; fi
      if [ "$MONTH" == "08" ]; then MONTH="August"; fi
      if [ "$MONTH" == "09" ]; then MONTH="September"; fi
      if [ "$MONTH" == "10" ]; then MONTH="Oktober"; fi
      if [ "$MONTH" == "11" ]; then MONTH="November"; fi
      if [ "$MONTH" == "12" ]; then MONTH="Dezember"; fi

      # zusammengesetzer datums-, zeitstring in bild einfügen (mittig oben)
      convert $J -gravity North -pointsize $FS -font Courier-10-Pitch-Regular -fill white -undercolor black -annotate +0+0 "Datum $DAY. $MONTH $YEAR Zeit $TIME" $J;
      FS2=$(bc -l <<< "$FS+25" | awk -F. '{print $1}')
      convert $J -gravity North -pointsize $FS -font Courier-10-Pitch-Regular -fill white -undercolor black -annotate +0+$FS2 "Position $POSITION" $J;
   done
}


sysinfo() {
 if [ "$USER" != "root" ]; then
  echo -e $C_RED$BG_WHITE"Not root"$C_NO
  return
 fi
 export LANG=us_US
 echo -e $C_LIGHTGREEN"Release"$C_NO
 echo -en $C_CYAN" Distributor "$C_NO; lsb_release -ad 2>&1 | grep -v modules | grep "Distributor" | awk -F: '{print $2}' | sed 's/[^A-Za-z0-9]//i' 2>&1
 echo -en $C_CYAN" Description "$C_NO; lsb_release -ad 2>&1 | grep -v modules | grep "Description" | awk -F: '{print $2}' | sed 's/[^A-Za-z0-9]//i' 2>&1
 echo -en $C_CYAN" Release "$C_NO; lsb_release -ad 2>&1 | grep -v modules | grep "Release" | awk -F: '{print $2}' | sed 's/[^A-Za-z0-9]//i' 2>&1
 echo -en $C_CYAN" Codename "$C_NO; lsb_release -ad 2>&1 | grep -v modules | grep "Codename" | awk -F: '{print $2}' | sed 's/[^A-Za-z0-9]//i' 2>&1

 echo ""
 echo -e $C_LIGHTGREEN"CPU Info"$C_NO
 echo -en $C_CYAN" Architecture "$C_NO; lscpu | grep "Architecture:" | awk -F: '{print $2}' | sed 's/[^A-Za-z0-9]//i'
 echo -en $C_CYAN" CPUs "$C_NO; lscpu | grep -v NUMA | grep "CPU(s):" | awk -F: '{print $2}' | sed 's/[0-9]*$//i'
 echo -en $C_CYAN" Threads "$C_NO; lscpu | grep "Thread(s)" | awk -F: '{print $2}' | sed 's/[0-9]$//i'
 echo -en $C_CYAN" Cores "$C_NO; lscpu | grep "Core(s)" | awk -F: '{print $2}' | sed 's/[0-9]$//i'
 echo -en $C_CYAN" Model "$C_NO; lscpu | grep "Model name:" | awk -F: '{print $2}' | sed 's/[^A-Za-z0-9]//i'
 MIN=$(lscpu | grep "CPU min")
 MAX=$(lscpu | grep "CPU max")
 MHZ=$(lscpu | grep "CPU MHz")
 echo -en $C_CYAN" CPU Speed (min/max/now) "$C_NO; echo "$MIN/$MAX/$MHZ"
 echo -en $C_CYAN" Bogo "$C_NO; lscpu | grep "Bogo" | awk -F: '{print $2}' | sed 's/[^A-Za-z0-9]//i'

 echo ""
 echo -e $C_LIGHTGREEN"System Info"$C_NO
 sudo dmidecode | grep Base -A 10 | grep Manufact
 sudo dmidecode | grep Base -A 10 | grep Product
 sudo dmidecode | grep Base -A 10 | grep Version
 sudo dmidecode | grep Base -A 10 | grep Serial

 echo ""
 echo -e $C_LIGHTGREEN"Memory Info"$C_NO
 echo -n "total "; free -m | grep Mem | awk '{ print $2 }'
 echo -n "used "; free -m | grep Mem | awk '{ print $3 }'
 echo -n "free "; free -m | grep Mem | awk '{ print $4 }'
 echo -n "shared "; free -m | grep Mem | awk '{ print $5 }'
 echo -n "buff/cache "; free -m | grep Mem | awk '{ print $6 }'
 echo -n "avail "; free -m | grep Mem | awk '{ print $7 }'

 echo ""
 echo -e $C_LIGHTGREEN"Swap Info"$C_NO
 echo -n "total "; free -m | grep Swap | awk '{ print $2 }'
 echo -n "used "; free -m | grep Swap | awk '{ print $3 }'
 echo -n "free "; free -m | grep Swap | awk '{ print $4 }'
}

screen_h() {
   echo "
   Ctrl+a c(reate)
   Ctrl+a n(ext)
   Ctrl+a 0-9
   Ctrl+a A (rename)
   Ctrl+a d(etach)
   Ctrl+a \" (liste)
   Ctrl+a K(ill)
   screen -r(eattach)
   # Scrollen, Markieren, EinfÃŒgen
   Ctrl+a [ wechselt in den Copy Mode
   Mit den Pfeil-, Maustasten scrollen
   Mit Enter Anfang der Markierung setzen, mit zweitem Enter das Ende setzen
   Ctrl+a ] fÃŒgt markierten Bereich ein
   "
}

sudo_h() {
   echo "
   /etc/sudoers
   andre   ALL=(ALL) NOPASSWD: ALL
   "
}

iptables_h() {
   echo "
   # Policy fÃŒr Chain setzen
   iptables -P INPUT ACCEPT
   iptables -P INPUT DROP

   #Neue Chain anlegen
   iptables -N NEW_CHAIN

   # NEW_CHAIN an INPUT anhÃ€ngen (-A) / am Anfang von INPUT einfÃŒgen (-I)
   iptables -A/-I INPUT -j NEW_CHAIN

   # Regeln an neue Chain anhÃ€ngen (-A) / am Anfang einfÃŒgen (-I) oder lÃ¶schen (-D)
   iptables -A/-I/-D NEW_CHAIN -p tcp --dport 22 -j ACCEPT
   iptables -A/-I/-D NEW_CHAIN -p udp --dport 53 -j ACCEPT
   iptables -A/-I/-D NEW_CHAIN -s 10.0.0.0/8     -j DROP
   iptables -A/-I/-D NEW_CHAIN -d 127.0.0.0/8    -j ACCEPT
   iptables -A/-I/-D NEW_CHAIN -m state --state ESTABLISHED,RELATED -j ACCEPT

   # RÃŒcksprung aus Chain (nicht zwingend notwendig)
   iptables -A NEW_CHAIN -j RETURN

   # Chain aus Chain entfernen
   iptables -D INPUT -j NEW_CHAIN

   # Chain leeren (-F) / lÃ¶schen (-X)
   iptables -F NEW_CHAIN

   # Kommentare als weitere Parameter in der Regel einfÃgen
   -m comment --comment "Kommentar"

   # Logging, ACCEPT o DROP als Regel dahinter definieren
   iptables .... -j LOG
   "
   echo "Beispielkonfig

*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [13057:10612758]
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A INPUT -s 10.0.0.0/8       -i eth0 -j ACCEPT
-A INPUT -s 192.168.0.0/16   -i eth0 -j ACCEPT
-A INPUT -s 172.16.0.0/12    -i eth0 -j ACCEPT
-A INPUT -s 195.20.133.0/24  -i eth1 -j ACCEPT
-A INPUT -s 149.13.94.0/24   -i eth1 -j ACCEPT
-A INPUT -s 92.50.110.208/29 -i eth1 -j ACCEPT
-A INPUT -s 127.0.0.0/8              -j ACCEPT
-A INPUT -p icmp                     -j ACCEPT
-A INPUT                             -j LOG
-A INPUT                             -j DROP
COMMIT
    "
}


delete_files_older() {
   if [ "$4" == "" ]; then
      echo ""
      echo "$0 <Pfad> <Tage> <d|f> <r|n>"
      echo ""
      echo "Pfad gibt an aus welchem Verzeichnis gelÃ¶scht werden soll"
      echo "Tage gibt an ab welchem Alter Verzeichnisse und Dateien gelÃ¶scht werden"
      echo "d Verzeichnisse lÃ¶schen, f Dateien lÃ¶schen"
      echo "r rekursiv lÃ¶schen, n nicht rekursiv lÃ¶schen. Bei DateilÃ¶schungen ist egal was hier angegeben wird"
      echo ""
   else
      echo "Wechsle in Verzeichnis $1"
      cd $1
      for I in `find $1 -mtime +$2`
      do
         if [ $3 == "f" ]; then
            if [ -f $I ]; then
               echo "LÃ¶sche Datei $I"
               rm $I
            fi
         elif [ $3 == "d" ]; then
            if [ $4 == "r" ]; then
               if [ -d $I ]; then
                  echo "LÃ¶sche Verzeichnis $I rekursiv"
                  rm -fR $I
               fi
            elif [ $4 == "n" ]; then
               if [ -d $I ]; then
                  echo "LÃ¶sche Verzeichnis $I (nicht rekursiv)"
                  rmdir $I
               fi
            fi
         fi
      done
   fi
}

delete_old_logs() {
    find /var/log -name "*.gz" -o -name "*.1" -o -name "*.2" -o -name "*.old" | xargs rm
    find /var/log -mtime +7 | xargs rm
}

ssh_personal_environment() {
   if [ $# -gt 0 -a "$1" = "--debug" ] ; then
      export SSH_PERS_ENV_DEBUG=1
      shift
   fi
   if test -n "$SSH_PERS_ENV_FILES" -o "$#" -gt 0  ; then
      export SSH_PERS_ENV_FILES=$(
      eval echo $@ $SSH_PERS_ENV_FILES | \
      tr " " "\n" | \
      sort -u | \
      tr "\n" " "
      ) # pattern expansion
      test "${SSH_PERS_ENV_DEBUG:-}" && \
      echo "Packing as SSH Personal Environment: $SSH_PERS_ENV_FILES" 1>&2
      export SSH_PERS_ENV_DATA=$(tar -C ~ -cz $SSH_PERS_ENV_FILES | base64)
   fi
}

ssh_personal_config() {
   echo "append to /etc/ssh/ssh_config on ssh client"
   echo "# this content comes from the ssh-personal-environment package"
   echo "SendEnv SSH_PERS_ENV_DATA SSH_PERS_ENV_FILES SSH_PERS_ENV_DEBUG"
   echo "# end of content from the ssh-personal-environment package"
   echo ""
   echo "append to /etc/ssh/sshd_config on ssh server"
   echo "# this content comes from the ssh-personal-environment package"
   echo "AcceptEnv SSH_PERS_ENV_DATA SSH_PERS_ENV_FILES SSH_PERS_ENV_DEBUG"
   echo "# end of content from the ssh-personal-environment package"
   echo ""
   echo "insert into /etc/ssh/sshrc on ssh server"
   echo "#!/bin/sh"
   echo "if which xauth >/dev/null 2>&1 && read proto cookie && test \"\$DISPLAY\" ; then"
   echo "        if test \"\$(expr substr \"\$DISPLAY\" 1 10)\" = localhost: ; then"
   echo "                  # X11UseLocalhost=yes"
   echo "                echo add unix:\"\$(expr substr \"\$DISPLAY\" 11 99)\" \$proto \$cookie"
   echo "        else"
   echo "                # X11UseLocalhost=no"
   echo "                echo add \"\$DISPLAY\" \$proto \$cookie"
   echo "        fi | xauth -q -"
   echo "fi"
   echo "# unpack personal environment"
   echo "if test \"\$SSH_PERS_ENV_DATA\" ; then"
   echo "  if [ ! \"\$USER\" = \"root\" ] ; then"
   echo "    test \"\$SSH_PERS_ENV_DEBUG\" && echo \"Unpacking SSH Personal Environment Data...\""
   echo "    echo \"\$SSH_PERS_ENV_DATA\" | base64 -d | tar \${SSH_PERS_ENV_DEBUG:+-v} -xzC ~"
   echo "  fi"
   echo "fi"
   echo ""
}

logrotate() {
   if [ "$1" == "" ]
   then
      echo ""
      echo "Aufruf:"
      echo ""
      echo "logrotate <DIR>"
      echo ""
      return
   fi

   logdir=$1
   oldlogdir=$logdir/rotate
   echo $oldlogdir
   mkdir $oldlogdir
   date=`date +"%Y-%m-%d_%H-%M"`
   # alte logfiles packen
   pushd .
   cd $logdir
   tar -cvzf $date.tar.gz *.log
   # archiv verschieben
   mv $date.tar.gz $oldlogdir
   # alte logs lÃ¶schen
   rm *.log
   popd
}

e1ping() {
    while (( "$#" ))
    do
        ping -W 1 -O -i 1 -c 1 $1 >/dev/null
        RV=$?
        if [ $RV -eq 0 ]
        then
            echo -n -e "\e[42;30m$1 is up\e[m  "
        else
            echo -n -e "\e[41m$1 is down\e[m"
        fi
        echo -n " "
        shift
    done
    echo
}

eping() {
    P=""
    while (( "$#" ))
    do
        P="$P $1"
        shift
    done
    echo ""
    I=0
    date
    while [ 1 ]
    do
        if [ "$I" == "10" ]
        then
            I=0
            date
        fi
        e1ping $P
        sleep 1
        I=`expr $I + 1`
    done
}

find_local_port() {
   N=$(($RANDOM + 10000))
   echo $N
}

find_local_ip() {
   I=$(($RANDOM % 250))
   echo $I
}

find_session_id() {
   S=`date +"%s"`
   echo $S
}

update_git() {
   echo "Gehe durch Unterverzeichnisse für git pulls"
   for DIR in `ls`
   do
      echo
      echo "########## $DIR"
      cd $DIR
      git pull
      cd ..
   done
}

pw() {
printf "\n B_uchstaben S_onderzeichen W_orte Z_iffern\n"
B='a b c d e f g h j k m n p q r s t u v w x y z A B C D E F G H J K L M N P Q R S T U V W X Y Z'
Z='1 2 3 4 5 6 7 8 9'
S='! - _ + / \ # $ % & ( ) [ ] { }'
echo -n "  " ; echo   B: $B
echo -n "  " ; echo   Z: $Z
echo -n "  " ; echo   S: $S

for I in `echo $B`
do
    echo $I >> alphabet
done

for I in `echo $S`
do
    echo $I >> zeichen
done

for I in `echo $Z`
do
    echo $I >> ziffern
done

#Generiere PW in der Form xxxxx-xxxxx-xxxxx-xxxxx
curl -k -s https://pw.andregeissler.de/duden1 > duden1
curl -k -s https://pw.andregeissler.de/duden2 > duden2
C=1

DC1=`cat duden1 | wc -l`
DC1=`expr $DC1 + 1`
DC2=`cat duden2 | wc -l`
DC2=`expr $DC2 + 1`

for I in `echo 4 9`
do
    printf "\n%2d) %2d W   : " $C $I
    for J in `seq 2 $I`
    do
        NR=`echo $(($RANDOM % $DC1 + 1))`
        B=`cat duden1 | head -n $NR | tail -n 1`
        echo -n $B"-"
    done
    NR=`echo $(($RANDOM % $DC1 + 1))`
    B=`cat duden1 | head -n $NR | tail -n 1`
    echo -n $B
    C=`expr $C + 1`
done
echo
for I in `echo 4 9`
do
    printf "\n%2d) %2d W   : " $C $I
    for J in `seq 2 $I`
    do
        NR=`echo $(($RANDOM % $DC2 + 1))`
        B=`cat duden2 | head -n $NR | tail -n 1`
        echo -n $B"-"
    done
    NR=`echo $(($RANDOM % $DC2 + 1))`
    B=`cat duden2 | head -n $NR | tail -n 1`
    echo -n $B
    C=`expr $C + 1`
done


cat alphabet > menge1 ; cat alphabet > menge2 ; cat alphabet > menge3
                        cat ziffern >> menge2 ; cat ziffern >> menge3
                                                cat zeichen >> menge3

AC=`cat menge1 | wc -l`
BC=`cat menge2 | wc -l`
CC=`cat menge3 | wc -l`

echo ""
# alphabet 47, zeichen 15, ziffern 9
    for I in `echo 12 16 30`
    do
        printf "\n%2d) %2d B   : " $C $I
        for J in `seq 1 $I`
        do
            # buchstaben AC=47
            NR=`echo $(($RANDOM % $AC + 1))`
            B=`cat menge1 | head -n $NR | tail -n 1`
            echo -n "$B"
        done

        C=`expr $C + 1`
        printf "\n%2d) %2d BZ  : " $C $I
        for J in `seq 1 $I`
        do
            # buchstaben, ziffern BC=56
            NR=`echo $(($RANDOM % $BC + 1))`
            B=`cat menge2 | head -n $NR | tail -n 1`
            echo -n "$B"
        done

        C=`expr $C + 1`
        printf "\n%2d) %2d BZS : " $C $I
        for J in `seq 1 $I`
        do
            # buchstaben, ziffern, zeichen CC=71
            NR=`echo $(($RANDOM % $CC + 1))`
            B=`cat menge3 | head -n $NR | tail -n 1`
            echo -n "$B"
        done
        C=`expr $C + 1`
        echo
    done

rm duden1
rm duden2
rm menge1
rm menge2
rm menge3
rm alphabet
rm zeichen
rm ziffern

}

rotate() {
   file=$1
   if [ "$file" == "" ]
   then
      echo "rotate <filename>"
      echo ""
      return
   fi
   echo "Rotiere $file nach $file.1"
   echo "        $file.1 nach $file.2"
   echo "   ..."
   echo "        $file.8 nach $file.9"
   echo "Lâsche $file.9"

   if [ -f $file ]
   then
      if [ -f $file.9 ] ; then rm $file.9 ; fi
      if [ -f $file.8 ] ; then mv $file.8 $file.9 ; fi
      if [ -f $file.7 ] ; then mv $file.7 $file.8 ; fi
      if [ -f $file.6 ] ; then mv $file.6 $file.7 ; fi
      if [ -f $file.5 ] ; then mv $file.5 $file.6 ; fi
      if [ -f $file.4 ] ; then mv $file.4 $file.5 ; fi
      if [ -f $file.3 ] ; then mv $file.3 $file.4 ; fi
      if [ -f $file.2 ] ; then mv $file.2 $file.3 ; fi
      if [ -f $file.1 ] ; then mv $file.1 $file.2 ; fi
      mv $file $file.1
      touch $file
   fi
}

wetter() {
 c=$1
 curl wttr.in/$c
}

wi() {
 f=$1
 d=$(date "+%Y-%m-%d")
 rotate $f.bu.$d > /dev/null 2>&1
 cp $1 $f.bu.$d
 vi -c ":syntax on" -c "set number" $f
}

ssh_env() {
 u=$1
 s=$2

 ssh-copy-id -oStrictHostKeyChecking=no -i $HOMEDIR/.ssh/id_ed25519 $u@$s > /dev/null 2>&1
 scp $HOMEDIR/.bashrc $u@$s:$HOMEDIR/.bash_profile

 ssh -q -X -oStrictHostKeyChecking=no $u@$s
}

crossword() {
   grep -hi "^$1\$" /usr/share/dict/* | sort | uniq
}

PATH="$HOMEDIR/perl5/bin${PATH:+:${PATH}}"; export PATH;
PERL5LIB="$HOMEDIR/perl5/lib/perl5${PERL5LIB:+:${PERL5LIB}}"; export PERL5LIB;
PERL_LOCAL_LIB_ROOT="$HOMEDIR/perl5${PERL_LOCAL_LIB_ROOT:+:${PERL_LOCAL_LIB_ROOT}}"; export PERL_LOCAL_LIB_ROOT;
PERL_MB_OPT="--install_base \"$HOMEDIR/perl5\""; export PERL_MB_OPT;
PERL_MM_OPT="INSTALL_BASE=$HOMEDIR/perl5"; export PERL_MM_OPT;

rm -f $HOMEDIR/.bash_profile

HOSTNAME=`hostname`
if [ "$HOSTNAME" != "server" ]
then
    if getent hosts ${MYSERVER} >/dev/null && nc -z -w1 ${MYSERVER} 2222 >/dev/null 2>&1; then
        if [ ! -f $HOMEDIR/bike.jpg ]; then
            timeout 3 scp -o ConnectTimeout=2 -P 2222 andregeissler@${MYSERVER}:/home/andregeissler/web/tools.andregeissler.de/public_html/bike.jpg              $HOMEDIR/bike.jpg
        fi
        if [ ! -f $HOMEDIR/ascii-image-converter ]; then
            timeout 3 scp -o ConnectTimeout=2 -P 2222 andregeissler@${MYSERVER}:/home/andregeissler/web/tools.andregeissler.de/public_html/ascii-image-converter $HOMEDIR/ascii-image-converter
        fi
    else
        echo "${MYSERVER} nicht erreichbar"
    fi
    
    for i in `ls /etc/bash_completion.d/*.bash`; do
        source $i
    done
    for i in `ls $HOMEDIR/bash_extensions/*.bash`; do
        bash $i
    done
    
    if [ -f $HOMEDIR/ascii-image-converter ] && [ -f $HOMEDIR/bike.jpg ]; then
        echo; $HOMEDIR/ascii-image-converter -C $HOMEDIR/bike.jpg -d 80,23 | tr "@" " " ; echo
    fi
fi