#!/bin/bash #Funktion, um eine Linie zu zeichnen function linie(){ echo "-----------------------------------------------------------------------------------------------------------------------" } #setzen des Seperators, damit das Array befüllt werden kann IFS=$'\n' #Einlesen der Daten in ein Array "Daten" Daten=( `ps -C vsftpd -o user,pid,stime,cmd | grep "vsftpd:" | egrep -v 'root|nobody' | tr -s ' ' ' '` ) # Zeichnen der ersten Tabellenspalte echo -e "\nftpwho for vsftpd\n" linie printf "| %-15s| %-5s | %-17s| %-10s| %-60s|\n" User Start IP Up/Down File linie #echo "Ausgabe des Arrays" for (( i=0 ; $i<${#Daten[*]} ; i=i+1)) do IFS=$' ' #Befüllen des Zweiten Arrays, das für jede Zeile zuständig ist Zeile=( ${Daten[$i]} ) # Testschleife, um das Array Zeile[] auszugeben # for (( zaehler=0 ; $zaehler<${#Zeile[*]} ; zaehler=zaehler+1 )) # do # echo Zeile $zaehler: ${Zeile[$zaehler]} # done #Wenn nicht der Username sondern die UID ausgegeben wird, wird dies behoben case ${Zeile[0]:0:1} in 0|1|2|3|4|5|6|7|8|9) user=`grep :${Zeile[0]}: /etc/passwd | cut -d":" -f1` ;; *) user=${Zeile[0]} esac #Zeit und IP aus dem Array in Variablen schreiben zeit=${Zeile[2]} ip=${Zeile[4]%%/*:} # Umwandeln der Worte STOR in "Upload", RETR in "Download" und IDLE in "-" case ${Zeile[5]} in STOR) updown="Upload" ;; RETR) updown="Download" ;; IDLE) updown="-" ;; *) esac what='' for (( z=6 ; $z<${#Zeile[*]} ; z=z+1)) do # echo $z what=$what\ ${Zeile[$z]} # echo $what done # Setzen des Seperierungszeichens, damit die Ausgabe richtig formatiert wird IFS=$'' # Ausgabe der jeweiligen ArrayZeile printf "| %-15s| %-5s | %-17s| %-10s| %-60s|\n" $user $zeit $ip $updown $what; done if [ ! $i = "0" ] then linie fi echo