Aufgabenstellung :
Shell Script erstellen. welche folgende Aufagbe löst:
Anlegen eines temporären Swapfiles in /tmp
Name der Swapdatei = swapfile
Das Ganze soll nur als root funktionieren, ansosten Warnung ausgbenen
Script soll bei Aufruf prüfen, ob es diese Datei ggf. schon gibt, dann mittels swapoff trenne und Plattenplattz löschen. Wenn Datei nicht existiert Datei anlegen, und mittels swapon zum Swap hinzufügen.
Defaultwert soll 32 MB sein, welcher aber als Startoption anders festgelegt werden kann.
Des Weiteren soll eine Prüfung erfolgen, ob der gesamte vefügbare Plattenplatz größer 10% vom Gesamtplattenplatz ist.
Hier die Lösung zum Üben: (leider ist die Strukturierung verloren gegangen)
#!/bin/sh
###########################################################################
# Bash-Shell-Script Anlage eines temporaeren Swapfiles
# zur Erweiterung des Swapbereiches
###########################################################################
# Syntax ./newswap <optional Groesse der Swapdatei als integer>
# Default als Groesse der Swapdatei ist 32 MB
###########################################################################
# Version
# 1.0 Ersterstellung 29.10.2001
# 1.1 User-Abfrage eingebaut 10.04.2004
###########################################################################
# Anlagen eines zusaetzlichen Swapfiles als Datei
ver="1.1"
swapdir="/tmp/" # Ablageort der Swapdatei ggf. anpassen
#swapdir="/mnt/dosf/" # Ablageort der Swapdatei ggf. anpassen
swapfilename="swapfile"
swaptarget=$swapdir$swapfilename
blocksize=1024
isroot=$(whoami)
swapcount=$[$blocksize * 32] # Defaultgroesse = 32MB
if [ $isroot = "root" ]; then
freespace="free -o -k -t"
helptxt="\n\n(C) 2001-04 by repi newswap V $ver\n=================================
\nVergroessern des Swapbereiches mittels zusaetzliche temporaerer Swapdatei
\nUsage: $0 (Speicher in MB als integer = 32MB default)\n-(fh)
--help\n-f Anzeige Speicherbelegung\n-h oder --help diese Hilfe\n"
case "$1" in
-f ) echo -e "\nSpeicher und Plattenbelegung im Zielverzeichniss : $swaptarget";
eval $freespace ;eval df $swapdir; exit ;;
-h | --help ) echo -e $helptxt; exit ;;
* ) ;;
esac
# Neue Dateigroesse bei optionaler Eingabe berechnen
if [ "$1" ] ; then
swapcount=$[$blocksize * $1]
fi
# Pruefen, ob Swapdatei existiert, dann anlegen, sonst
# Swapfile ausser Betrieb nehmen und loeschen
if test -e $swaptarget; then
# Swapfile ausser Betrieb nehmen
swapoff $swaptarget
# Swapfile loeschen
rm $swaptarget
#Speicheranzeige
free -o -k -t
else
# Ermitteln, ob Plattenplatz reicht
countall=$(df $swapdir | grep dev | awk '{print $2}')
countcheck=$(df $swapdir | grep dev | awk '{print $4}')
countnew=$[$countcheck - $swapcount]
usepercentnew=$[($countnew * 100) / $countall]
# Bei Plattenplatz < 10 % wird kein Swapdatei angelegt
if [ $usepercentnew -lt 10 ]; then
echo -e "\007Plattenplatz kleiner 10 % !, Swapfile kann nicht angelet werden !!"
else
echo "Bleiben freier Plattenspeicher: " $usepercentnew "%"
# Leerdatei gewuenschter Groesse erzeugen
dd if=/dev/zero of=$swaptarget bs=$blocksize count=$swapcount
# Initialisierung des Swapfiles
mkswap $swaptarget $swapcount
# Zurueckschreiben aller Aenderungen im Dateisystem
sync
# Swapfile in Betrieb nehmen
swapon $swaptarget
# Speicheranzeige
free -o -k -t
fi
fi
else
echo
echo "Dieses Tool funktioniert nur als root..."
echo "... Sie sind hingegen als "$isroot" angemeldet !"
echo
fi