Linkliste für Perl und PHP Skripte 

Coder World
Planet Concept
Jax PHP Skripte
PHP Archiv
CGI Resource (US)
Perl Scripts
Hotscripts (US)
PHP Free



Forum gefällig ??? Nehmt dieses hier :D


SMF ist sehr sicherheitsorientiert programmiert, hat deswegen aber nicht weniger Features als die anderen gängigen Forensysteme (PHPBB, VBulletin, Invision oder Burning Board). Mein Favorit unter den Forensystemen.
Benötigt PHP & MySQL.



CMS, Blog, Onlineshop oder Wiki gesucht ?












IP per Mail zuschicken lassen

Das braucht man wenn man z.B. Provider hat welche einen nach 24 Std. trennen und man nicht mit Diensten wie z.B. Dyndns.org und ähnliche arbeiten will ...
Kleines Script um sich die eigene IP per Mail zuschicken zu lassen (Achtet darauf das euer Provider das schicken von Mails per privaten Maschinen erlaubt, oft landen diese im Spamordner oder kommen gar nicht erst an ... dann müsst Ihr euch einen anderen suchen ...)

MeineIP.tar - Dieses Script entpacken und einen cronjob einrichten der alle 5 Minuten aktiv wird.

5-55/5 * * * * perl /home/meineip.pl >> /dev/null

Dann noch das Script anpassen (die ersten paar Zeilen) und das wars ...



Bash Programmierung Grundlagen :

Der Befehl Test :

Der Befehl test dient zum Überprüfen von Dateitypen bzw. Vorhandensein von Dateien und zum 
Vergleichen von Werten. Der Aufruf erfolgt mit

test Vergleich

wobei Vergleich die Prüfung bzw. den Vergleich enthält. Als Ergebnis gibt test 0 für Wahr 
(true) und 1 für Falsch (false) zurück. Der Rückgabewert wird mit Hilfe der Shelleigenen
 Variablen $? ermittelt.

Es gibt Vergleiche für Dateien (file), Zeichenketten (string) und Integer-Zahlen (integer). 
Integer-Zahlen sind ganze Zahlen, also ohne Nachkommastellen!

Vergleich 	            Erklärung
---------------------------------------------------------------------------------
STRING1 == STRING2 	    string1 und string2 sind gleich
STRING1 != STRING2 	    string1 und string2 sind nicht gleich
INTEGER1 -eq INTEGER2       Integer-Zahl1 ist gleich wie Integer-Zahl2
INTEGER1 -ne INTEGER2       Integer-Zahl1 ist ungleich wie Integer-Zahl2
INTEGER1 -gt INTEGER2 	    Integer-Zahl1 ist grösser als Integer-Zahl2
INTEGER1 -ge INTEGER2 	    Integer-Zahl1 ist größer gleich Integer-Zahl2
INTEGER1 -lt INTEGER2 	    Integer-Zahl1 ist kleiner als Integer-Zahl2
INTEGER1 -le INTEGER2 	    Integer-Zahl1 ist kleiner gleich Integer-Zahl2
-d FILE 	            Die Datei FILE existiert und ist ein Verzeichnis
-f FILE 	            Die Datei FILE existiert und ist eine reguläre Datei

Die Auflistung der Vergleiche ist nicht vollständig. Bedeutend mehr Vergleiche findet 
man unter "man 1 test".

Logische Verknüpfungen

Man kann mehrere Vergleiche mit logischem UND (AND) oder logischem ODER (OR) verknüpfen. 
Für die UND-Verknüpfung verbindet man die Vergleiche mit -a für die ODER-Verknüpfung mit -o.

Vergleich1 -a Vergleich2 -a .... -a VergleichN         UND-Verknüpfung

Vergleich1 -o Vergleich2 -o .... -o VergleichN         ODER-Verknüpfung

Bei der UND-Verknüpfung müssen alle Vergleiche WAHR sein, also den Wert 0 zurückgeben,damit 
der gesamte Ausdruck WAHR ist. Bei der ODER-Verknüpfung muss einer der Vergleiche WAHR (TRUE) 
sein, damit der gesamte Ausdruck WAHR ist.

Es gibt 2 Schreibweisen für den Befehl test. Die erste :

test vergleich

Die zweite :

[ vergleich ]

Wobei die Leerzeichen zwischen den eckigen Klammern und dem Vergleich eingehalten werden müssen!

If/Else Flusskontrolle :

#!/bin/bash
if [ $variable == "" ]
then
	Code
elif [ $variable == "1" ]
then 
	Code
else
	Code
fi

Case-Statement :

#!/bin/bash
case "$VARIABLE" in
        value1) command ;;
        value2) command
                command
                command ;;
        value3) command
                command ;;
        value4) command ;;
             *) command
                command ;;
esac

For-Schleifen :

Die syntax fuer for-Schleifen sei anhand des folgenden Beispiels dargestellt.

#!/bin/bash
for X in red green blue
do
    echo $X
done
        
Zu beachten ist, dass Zeichenketten ggf. mittels Quotes (Gaensefuesschen) umschlossen werden 
muessen. Des weiteren gelten hier auch alle anderen Moeglichkeiten um Listen zu generieren 
(*-Wildcard, etc.).

# Diese Schleife beginnt mit einem Wert von 1 und
# läuft in mit einer Schrittgrösse von 1 aufwärts
# bis zur 5. Der Schleifenzähler wird dann mit
# echo am Bildschirm ausgegeben.

#!/bin/bash
for (( I=1; $I <= 5; I++ ))
do
        echo $I
done

While-Schleife :

Solange eine Bedingung erfuellt ist, wird die Kommandos in der While-Schleifen ausgefuehrt.

#!/bin/bash
X=0
while [ $X -le 20 ]
do
    echo $X
    X=$((X+1))
done

Until-Schleife :

until führt eine Schleife solange aus wie eine Bedingung nicht erfüllt ist. Der Unterschied 
zur while Schleife besteht damit in der logisch negierten Form der Bedingung.

Syntax:  
until Bedingung
do
Kommandoliste
done 

Funktionen :

Wie in den meisten Programmiersprachen ist es auch in bash moeglich Funktionen zu deklarieren 
und auf diesem Wege Quellcode logisch zu gruppieren.

#!/bin/bash
function myfunc {
    echo "Hallo Welt !"
}
myfunc
      
Eine Funktion mit Parametern sieht wie folgt aus:

#!/bin/bash
function myfunc {
    echo $1 $2
}
myfunc Hallo "Welt !"




Per Script letzter Tag im Monat ermitteln und Befehle dann ausführen.

#!/bin/sh
# Script lastday.sh
# letzter Tag im Monat ermitteln und Befehle dann ausführen

TODAY=`date +%d`
TOMORROW=`date +%d -d "1 day"`
TIME=`date +%H%M`

# See if tomorrow's day is less than today's
if  [  $TOMORROW  -lt  $TODAY  ];  then
	echo  "Letzter Tag im Monat !"
	if  [  $TIME  -ge 2350 ];  then
	echo  "$TIME ist größer als 2350"
	echo  "Führe Befehle aus !"
	rm /var/lib/vnstat/eth0
	vnstat -u -i eth0
	fi
else
	if  [  $TIME  -ge 2350 ];  then
		echo  "$TIME ist größer als 2350"
		echo  "aber nicht letzter Tag im Monat. Führe keine Befehle aus !"
	else
		if  [  $TIME  -le 2350 ];  then
		echo  "$TIME ist kleiner als 2350"
		echo  "und es nicht letzter Tag im Monat. Führe keine Befehle aus !"
		fi
	fi
fi

Dann noch ein cronjob, z.B :

55 23 * * * /home/.month.sh

Und schon haben wir etwas das am letzten Tag des Monats Befehle ausführt ...
In diesem Falle resettet es meine vnstat Counter ...



Eine Mail an alle Anwender, die ein Homeverzeichnis haben schicken.

#!/bin/bash
# Script mail2all
# schickt eine Mail an alle Anwender, die ein Homeverzeichnis haben

if ! test $1 ; 
	then
	echo " "
	echo "Aufruf: mail2all [Betreff - nur ein Wort!] [Dateiname-der-Nachricht]"
	echo "oder  : mail2all [Dateiname-der-Nachricht]"	
	echo " "
	exit 1

  	  elif ! test -e $2 ; then
	  echo " "
	  echo "Die Datei $2, die Sie als Mail verschicken wollen, gibt es nicht!"
	  echo " "
	  exit 1

	else
		if ! test $2 ;
		then
		echo " "		
		for i in `cat /etc/passwd | cut -d: -f1`
		do
		  if test -d /home/$i ; then
			/usr/bin/mail $i < $1
			echo "Mail mit dem Inhalt von $1 an $i abgeschickt"
		  fi
		done
			echo " "
		else
		echo " "		
		for i in `cat /etc/passwd | cut -d: -f1`
		do
		  if test -d /home/$i ; then
			/usr/bin/mail -s $1 $i < $2
			echo "Mail mit Betreff $1 und dem Inhalt von $2 an $i abgeschickt"
		  fi
		done
			echo " "
	fi
fi
exit 0




Beispielskript zum Disketten und Files zu bearbeiten.

#! /bin/bash

# Variablen anlegen zu besseren Arbeiten!
DS=Datensicherung
Datum=$(date +%H:%M)

# Abfrage ob Verzeichniss vorhanden, wenn nein, dann neu anlegen.
if [  ! -d $DS ]
then
        echo "Ich lege Verzeichnis $DS an."
        mkdir /mnt/$DS
# Wenn ja, dann Meldung und weiter!        
else
        echo "Verzeichnis $DS schon vorhanden"
fi

# Hier wird Diskette gemountet, dann werden die Dateien in das oben
# angelegte Verzeichniss kopiert.
# Danach Ausgabe, wieviel Dateien, wieviele Wörter und wieviele
# Buchstaben vorhanden sind!

mount /dev/sdb /mnt/disk
rm -Rf /mnt/$DS/*
cp /mnt/disk/* /mnt/$DS
files=`ls /mnt/$DS | wc -w`
echo "Es sind $files Dateien vorhanden!"
cat /mnt/$DS/* > /mnt/$DS/alles.txt
woerter=`cat /mnt/$DS/alles.txt | wc -w`
buchstaben=`cat /mnt/$DS/alles.txt | wc -c`
rm -Rf /mnt/$DS
echo "Es sind $woerter Wörter in allen Dateien vorhanden!"
echo "Es sind $buchstaben Buchstaben in allen Dateien vorhanden!"

# Hier wird die Diskette formatiert und das Skript darauf kopiert.
umount /mnt/disk
mkfs.ext2 -F -q /dev/sdb
mount /dev/sdb /mnt/disk
cp /mnt/skript1.sh /mnt/disk
chmod o+x /mnt/disk/skript1.sh
rm -Rf /mnt/disk/lost+found
umount /mnt/disk
echo "Ich habe fertig!!!"




Beispielskript erstellt x Dateien in vorgegebenem Verzeichnis und schreibt Erstellungsdatum rein.

#! /bin/bash

DIR=/mnt/test

# Abfrage ob Verzeichniss vorhanden, wenn nein, dann neu anlegen.
if [  ! -d $DIR ]
then
        mkdir /mnt/DIR
fi

erzeuge (){
     touch $DIR/Datei$1
     date > $DIR/Datei$1 
}

echo -n  "Wieviel Dateien wollen sie erstellen : "

# Bildschirmeingabe von Variable x
read x
i=0

while [ $x != $i ]; do
i=$(( $i + 1 ))
erzeuge $i
done




Traffic des Servers überwachen und bei überschreitung Alarm per Mail zuschicken lassen

Benötigt das Programm VNStat entweder für die Distribution ziehen oder
das Tool VNStat kompilieren.
VNStat legt sich beim Kompilieren in /etc/cron.d selbst einen Eintrag an.
Kernel testen mit :
vnstat --testkernel

Für die jeweilige Netzwerkkarte Datenbank anlegen :

vnstat -u -i eth0

Als Debug auf der Konsole spukt das Skript den Monatstraffic aus.
Klappt alles kann man dieses Script per Cronjob 1 x pro Stunde aufrufen lassen.

Wenn der Traffic überschritten wurde schickt ein Perl Script die Warnungsemail und erzeugt eine Datei
namens mailflag.txt. Damit erkennt das Programm das es für diesen Monat bereits die Warnung versendet hat.
Diese Datei muss am Anfang des Monats aus dem Datenverzeichnis gelöscht werden.
Auch am einfachsten per Cronjob.


Traffic.zip - Dieses Script entpacken und einen Cronjob einrichten der einmal jede Stunde aktiv wird.

Dann noch das Script anpassen (die ersten paar Zeilen) und das wars ...



Kiste runterfahren bzw rebooten per Menü

#! /bin/bash
# Kiste runterfahren bzw rebooten per Menü
# Copyright http://www.staschke.de

if test $UID -ne 0; then
   exec sudo $0 $*
fi

DIALOG=${DIALOG=/usr/bin/dialog}
$DIALOG --clear --title "SHUTDOWN MENUE BOX" \
        --menu "\n\
Bitte auswaehlen \n\
Navigation mit UP/DOWN Tasten, oder den \n\
ersten Buchstaben druecken (Hotkey), oder mit \n\
den Zifferntasten 1-3 eine Auswahl treffen. \n\
Try it now!\n\
 " 18 50 3 \
"Aus"  "Linux runterfahren" \
"Reboot" "Linux neu starten" \
"Cancel" "Menue abbrechen" 2> /tmp/menu.tmp.$$

       retval=$?

       choice=`cat /tmp/menu.tmp.$$`
       rm -f /tmp/menu.tmp.$$
       setterm -clear

       case $retval in
         1)
           echo "Cancel pressed.";;
         255)
           echo "ESC pressed.";;
       esac

if      [ "$choice" = "Aus" ];    then /sbin/shutdown -h now
exit 1
elif    [ "$choice" = "Reboot" ]; then /sbin/shutdown -r now
exit 1
elif    [ "$choice" = "Cancel" ]; then echo "Vorgang abgebrochen."
exit 1
fi

exit 0




File auf größe Überwachen und eine eMail schicken

#!/bin/bash

A=`ls -l /home/username/updates.txt | tr -s " " | cut -d " " -f 5`
if [ $A -gt 200 ] ; then
cat /home/username/updates.txt | mutt -s "Updates wurden installiert !" mich@domain.de
fi