Configs für Shell Scripte

S

Snycs

Gast
Hallo ich habe eine Frage. Ich arbeite derzeit an einem Script, mit dem ich verschiedene Minecraftserver ansteuern kann. Aktuell muss ich für jeden Server eine eigene Funktion anlegen.
Ich möchte aber eine Config File erstellen die Ungefähr so aufgebaut ist:

Code:
server1:
     VERZECHNIS                          
     BESCHREIBUNG
server2:
     VERZECHNIS                          
     BESCHREIBUNG
server3:
     VERZECHNIS                          
     BESCHREIBUNG
...

Wie kann ich nun die Informationen aus der Config File auslesen und in das Script einbinden? Aktuell sieht das ganze so aus:
Code:
#!/bin/bash

BACKTITLE="Servermanager by Snycs"
INPUT=/tmp/menu.sh.$$
OUTPUT=/tmp/output.sh.$$
trap "rm $OUTPUT; rm $INPUT; exit" SIGHUP SIGINT SIGTERM
AKAMIE=/home/mc/
LOGFILE=/home/mc/Logs/Syslog_$(date +%d.%m.%Y).log
DATE=$(date +%d.%m.%Y_%H:%M:%S_Uhr)
DAY=$(date +%d.%m.%Y)

############################################################################################################
function fortschritt() {
{	for I in $(seq 1 100) ; do
		echo $I
		sleep 0.01
	done
	echo 100; } | dialog --backtitle "[ F O R T S C H R I T T ]" \ --gauge "Fortschritt" 6 60 0
}
############################################################################################################
function server() {
	dialog 	--clear	--backtitle "$BACKTITLE" \ --title "[ S E R V E R A U S W A H L ]" \ --menu "Die Server können mit den Pfeiltasten ausgewählt werden.\n\Bitte einen Server auswählen!" 15 50 7 \

		Testserver "" \
		Verlassen "Schliesst den Servermanager" 2>"${INPUT}"

	MENUITEM=$(<"${INPUT}")

	case $MENUITEM in
		Testserver) testserver;;
		Verlassen) echo "Bye"; break;;
	esac
}
#++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
function testserver() {
	DIR=testserver
	dialog --clear --backtitle "$BACKTITLE" \ --title "[ T E S T S E R V E R ]" \ --menu "Die Aktionen können mit den Pfeiltasten ausgewählt werden.\n\Bitte einen Server auswählen!" 15 50 4 \

		Starten "Startet den Server." \
		Stoppen "Stoppt den Server." \
		Restart "Startet den Server neu." \
		Status "Zeigt den Serverstatus an." \
		Konsole "Geht in die Kosole" \
		Edit "Den Server bearbeiten" \
		Test "Das ist ein Testeintrag" \
		Verlassen "Schliesst den Servermanager" 2>"${INPUT}"
	
MENUITEM=$(<"${INPUT}")

case $MENUITEM in
	Starten) start;;
	Stoppen) stop;;
	Restart) restart;;
	Status) status;;
	Konsole) console;;
	Edit) edit;;
    	Test) test;;
	Verlassen) echo "Bye"; break;;
esac
}
#-----------------------------------------------------------------------------------------------------------
############################################################################################################
function start() {
        if screen -list | grep -q "$DIR"; then
			fortschritt
			dialog --title '[ F E H L E R ]' --msgbox 'Der Server ist bereits gestartet!' 5 40
		else
			fortschritt
			dialog --title '[ E R F O L G R E I C H ]' --msgbox 'Der Server wurde gestartet!' 5 50
                        cd $AKAMIE/$DIR/
        		bash start.sh
		fi
}
function stop() {
        if screen -list | grep -q "$DIR"; then
			fortschritt
			screen -S $DIR -X quit
			if screen -list | grep -q "$DIR"; then
				dialog --title '[ F E H L E R ]' --msgbox 'Der Server wurde nicht gestoppt!' 5 50
			else
				dialog --title '[ E R F O L G R E I C H ]' --msgbox 'Der Server wurde erfolgreich gestoppt!' 5 50
			fi
	else
			dialog --title '[ F E H L E R ]' --msgbox 'Der Server ist nicht gestartet!' 5 50
	fi
}

function restart() {
        screen -S $DIR -X quit
        fortschritt
        cd $AKAMIE/$DIR/
        bash start.sh
}
function console() {
        screen -r $DIR
}
function edit () {
	cd $AKAMIE/$DIR/
	mc
}
function status () {
	if screen -list | grep -q "$DIR"; then
		dialog --title '[ S T A T U S ]' --msgbox 'Der Server ist gestartet!' 5 50
	else
		dialog --title '[ S T A T U S ]' --msgbox 'Der Server ist gestoppt!' 5 50
	fi
}
############################################################################################################
function log () {
	nano $LOGFILE
}
############################################################################################################

############################################################################################################
while true
do

dialog --clear --backtitle "$BACKTITLE" \
--title "[ H A U P T M E N Ü ]" \
--menu "Die verschiedenen Optionen können mit de Pfeiltasten ausgewählt werden.\n\
Bitte Aufgabe wählen!" 15 70 4 \
Server "Hier können die Server verwaltet werden." \
Backup "Hier können Backups erstellt werden." \
Log "Hiermit können die Logdateien eingesehen werden." \
Verlassen "Schliesst den Servermanager" 2>"${INPUT}"

MENUITEM=$(<"${INPUT}")

case $MENUITEM in
	Server) server;;
	Backup) backup;;
	Log) log;;
	Verlassen) echo "Bye"; break;;
esac

done

[ -f $OUTPUT ] && rm $OUTPUT
[ -f $INPUT ] && rm $INPUT
 
Was du bspw. machen kannst um es verständlich zu halten, ist ein Verzeichnis festzulegen (In meinem Fall /home/minecraftmanager/conf.d/) und dort Dateien mit dem Namen des Servers abzuspeichern also bspw: server_hexxit_16554.conf server_vanilla_16555.conf mit dem Format:
DIR=/home/minecraftserver/server_hexxit_16554/
COMMENT=Hexxit Server running on Port 16554

Dann sagst du in deinem Manage Skript:
statisch: CONFDIR=/home/minecraftmanager/conf.d und
dynamisch: serverdir=$(cat $CONFDIR/$server.conf | grep DIR | cut -d '=' -f 2)
servercomment=$(cat $CONFDIR/$server.conf | grep COMMENT | cut -d '=' -f 2)

Hab nicht großartig drüber nachgedacht. Könnte man aber so lösen.
 
Zurück
Oben