Linux Shell Script: Übergabe Variablen Von Script A nach Script B

Killerkarnickel

Grünschnabel
Hallo Leute.

Ich habe folgendes Problem:

Ich habe ein Script geschrieben, welches einige Variablen beinhaltet. Diese Werte der Variablen sind aber bei jedem User anders. Deshalb habe ich versucht, ein Hauptscript zu erstellen und ein Script, welches die Variablen übergibt.

Das alte (statische) Script sieht so aus:

Code:
#! /bin/bash
# Variablen Anfang
SCRIPT_VERSION="1.5"
STEAM_UPDATE_USER="xxx"
STEAM_CMD_DIR=/home/$STEAM_UPDATE_USER/.STEAMCMD
STEAM_DAEMON="steam.sh"
STEAM_ACCOUNT_USER="xxx"
STEAM_ACCOUNT_PASSWORD="xxx"
GS_GAMEUSER="xxx"
GS_GAMEDIR="xxx"
GS_GAMEPATH=/home/$GS_GAMEUSER/server/$GS_GAMEDIR
GS_GAMEDAEMON="srcds_run"
GS_GAME="xxx"
GS_TICKRATE="xxx"
GS_MAP="xxx"
GS_IP="xxx"
GS_PORT="xxx"
GS_MAXPLAYERS_OVERRIDE="xxx"
GS_GAMETYPE="xxx"
GS_GAMEMODE="xxx"
GS_MAPGROUP="xxx"
GS_FASTDL_FILE="fastdl.cfg"
GS_FASTDL_URL="http://xxxx/fastdl/$GS_GAMEDIR/$GS_GAME"
GS_EXTENDED_PARAMS="-console -usercon +sv_pure 0"
GS_GAMEPARAMS="-$GS_GAME -tickrate $GS_TICKRATE $GS_EXTENDED_PARAMS +map $GS_MAP -ip $GS_IP -port $GS_PORT +game_type $GS_GAMETYPE +game_mode $GS_GAMEMODE +mapgroup $GS_MAPGROUP -maxplayers_override $GS_MAXPLAYERS_OVERRIDE"
CRYPTFILE_PASSWD="xxx"
UPDATERFILE="update_$GS_GAMEDIR"
NAME={$GS_GAME}_{$GS_PORT}
DESC="Gameserver"
# Variablen Ende

# Nicht bearbeiten!

if [ ! -x `which awk` ]; then echo "Du brauchst AWK fuer dieses Script"; exit 1; fi
if [ ! -x `which screen` ]; then echo "Du musst screen vorher installieren!"; exit 1; fi

if [ `whoami` = root ]
then
 usagetype=root
else
 usagetype=nonroot
fi

start() {
   if [ ! -d $GS_GAMEPATH ]; then echo " ... Ordner nicht vorhanden: $GS_GAMEPATH!";  exit 1; fi
   if [ ! -x $GS_GAMEPATH/$GS_GAMEDAEMON ]; then echo "$GS_GAMEPATH/$GS_GAMEDAEMON existiert nicht oder ist nicht ausführbar!"; exit 1; fi
   if status; then echo " ... $DESC: $NAME läuft schon!"; exit 1; fi

   case "$usagetype" in
   root)
   
# Loeschen alter Files
rm $GS_GAMEPATH/screenlog.0
echo "##########################################################################"
echo "#### CS: GO Serverstartscript mit Autoupdatescript by Killerkarnickel ####"
echo "#### Version $SCRIPT_VERSION #########################################################"
echo "##########################################################################"
echo ""
cd $STEAM_CMD_DIR ;
if [ -r $UPDATERFILE.gpg ]; then echo "Updatefile für $GS_GAMEDIR existiert bereits!"; echo "Updatefile muss nicht erstellt werden!";
else echo "Updatefile für $GS_GAMEDIR existiert nicht! Updatefile wird nun erstellt."; echo "Bitte warten...";
echo "login $STEAM_ACCOUNT_USER $STEAM_ACCOUNT_PASSWORD" >>$UPDATERFILE
echo "force_install_dir $GS_GAMEPATH" >>$UPDATERFILE
echo "app_update 740" >>$UPDATERFILE
echo "quit" >>$UPDATERFILE
echo "quit" >>$UPDATERFILE
echo "Updatefile für $GS_GAMEDIR wurde erfolgreich erstellt!"
echo "Updatefile für $GS_GAMEDIR wird verschlüsselt!"
echo "Bitte warten..."
gpg -c --force-mdc --passphrase $CRYPTFILE_PASSWD $UPDATERFILE ;
echo "Updatefile für $GS_GAMEDIR wurde erfolgreich verschlüsselt!"
echo "Lösche unverschlüsselte Updatedatei von $GS_GAMEDIR!"
echo "Bitte warten..."
rm -R "$UPDATERFILE"
echo "Updatefile von $GS_GAMEDIR wurde erfolgreich gelöscht!"
fi
echo ""
echo "##########################################################################"
echo "#### Updatescript wird nun ausgeführt! ###################################"
echo "#### Falls ein Update ausständig ist, wird es nun installiert! ###########"
echo "#### Bitte warten... #####################################################"
echo "##########################################################################"
echo ""
cd $STEAM_CMD_DIR
gpg --passphrase $CRYPTFILE_PASSWD -d $UPDATERFILE.gpg 2>/dev/null | STEAMEXE=steamcmd ./$STEAM_DAEMON ;
echo ""
echo "##########################################################################"
echo "#### Ausständige Updates erfolgreich installiert! ########################"
echo "##########################################################################"
echo ""
echo "##########################################################################"
echo "#### Fastdownloadscript wird nun ausgeführt! #############################"
echo "#### Falls ein Update ausständig ist, wird es nun installiert! ###########"
echo "#### Bitte warten... #####################################################"
echo "##########################################################################"
echo ""
cd $GS_GAMEPATH/$GS_GAME/cfg
if [ -r $GS_FASTDL_FILE ]; then echo "$GS_FASTDL_FILE für $GS_GAMEDIR existiert bereits!"; echo "$GS_FASTDL_FILE muss nicht erstellt werden!";
else echo "$GS_FASTDL_FILE für $GS_GAMEDIR existiert nicht! $GS_FASTDL_FILE wird nun erstellt."; echo ""; echo "Bitte warten...";
		echo //Automatisches Fastdownloadscript  >> $GS_FASTDL_FILE
		echo //By Killerkarnickel								  >> $GS_FASTDL_FILE
		echo //----------------------------------------------------------------------  >> $GS_FASTDL_FILE
		echo sv_downloadurl "\"$GS_FASTDL_URL\"" 				  >> $GS_FASTDL_FILE
echo "$GS_FASTDL_FILE für $GS_GAMEDIR wurde erfolgreich erstellt!"
echo ""
echo "#### Fastdownloadscript wurde geupdated! #################################"
fi
echo ""
echo "##########################################################################"
echo "#### Gehe über zum Gameserverstart! ######################################"
echo "#### Folgende Startparameter werden verwendet: ###########################"
echo "#### -ip $GS_IP ###################################################"
echo "#### -port $GS_PORT #########################################################"
echo "#### -game $GS_GAME ##########################################################"
echo "#### -tickrate $GS_TICKRATE #######################################################"
echo "#### -maxplayers_override $GS_MAXPLAYERS_OVERRIDE #############################################"
echo "#### Gamemod: Custom #####################################################"
echo "#### -mapgroup $GS_MAPGROUP ###################################################"
echo "#### FASTDL: On ##########################################################"
echo "##########################################################################"
echo ""
echo "##########################################################################"
echo "#### Führe Gameserverstart mit den Parametern durch! #####################"
echo "#### Bitte warten... #####################################################"
echo "##########################################################################"
echo ""
    su - $GS_GAMEUSER -c "cd $GS_GAMEPATH ; screen -AmdSL $NAME ./$GS_GAMEDAEMON $GS_GAMEPARAMS"
   ;;
   nonroot)
   
# Loeschen alter Files
rm $GS_GAMEPATH/screenlog.0
echo "##########################################################################"
echo "#### CS: GO Serverstartscript mit Autoupdatescript by Killerkarnickel ####"
echo "#### Version $SCRIPT_VERSION #########################################################"
echo "##########################################################################"
echo ""
cd $STEAM_CMD_DIR ;
if [ -r $UPDATERFILE.gpg ]; then echo "Updatefile für $GS_GAMEDIR existiert bereits!"; echo "Updatefile muss nicht erstellt werden!";
else echo "Updatefile für $GS_GAMEDIR existiert nicht! Updatefile wird nun erstellt."; echo "Bitte warten...";
echo "login $STEAM_ACCOUNT_USER $STEAM_ACCOUNT_PASSWORD" >>$UPDATERFILE
echo "force_install_dir $GS_GAMEPATH" >>$UPDATERFILE
echo "app_update 740" >>$UPDATERFILE
echo "quit" >>$UPDATERFILE
echo "quit" >>$UPDATERFILE
echo "Updatefile für $GS_GAMEDIR wurde erfolgreich erstellt!"
echo "Updatefile für $GS_GAMEDIR wird verschlüsselt!"
echo "Bitte warten..."
gpg -c --force-mdc --passphrase $CRYPTFILE_PASSWD $UPDATERFILE ;
echo "Updatefile für $GS_GAMEDIR wurde erfolgreich verschlüsselt!"
echo "Lösche unverschlüsselte Updatedatei von $GS_GAMEDIR!"
echo "Bitte warten..."
rm -R "$UPDATERFILE"
echo "Updatefile von $GS_GAMEDIR wurde erfolgreich gelöscht!"
fi
echo ""
echo "##########################################################################"
echo "#### Updatescript wird nun ausgeführt! ###################################"
echo "#### Falls ein Update ausständig ist, wird es nun installiert! ###########"
echo "#### Bitte warten... #####################################################"
echo "##########################################################################"
echo ""
cd $STEAM_CMD_DIR
gpg --passphrase $CRYPTFILE_PASSWD -d $UPDATERFILE.gpg 2>/dev/null | STEAMEXE=steamcmd ./$STEAM_DAEMON ;
echo ""
echo "##########################################################################"
echo "#### Ausständige Updates erfolgreich installiert! ########################"
echo "##########################################################################"
echo ""
echo "##########################################################################"
echo "#### Fastdownloadscript wird nun ausgeführt! #############################"
echo "#### Falls ein Update ausständig ist, wird es nun installiert! ###########"
echo "#### Bitte warten... #####################################################"
echo "##########################################################################"
echo ""
cd $GS_GAMEPATH/$GS_GAME/cfg
if [ -r $GS_FASTDL_FILE ]; then echo "$GS_FASTDL_FILE für $GS_GAMEDIR existiert bereits!"; echo "$GS_FASTDL_FILE muss nicht erstellt werden!";
else echo "$GS_FASTDL_FILE für $GS_GAMEDIR existiert nicht! $GS_FASTDL_FILE wird nun erstellt."; echo ""; echo "Bitte warten...";
		echo //Automatisches Fastdownloadscript  >> $GS_FASTDL_FILE
		echo //By Killerkarnickel								  >> $GS_FASTDL_FILE
		echo //----------------------------------------------------------------------  >> $GS_FASTDL_FILE
		echo sv_downloadurl "\"$GS_FASTDL_URL\"" 				  >> $GS_FASTDL_FILE
echo "$GS_FASTDL_FILE für $GS_GAMEDIR wurde erfolgreich erstellt!"
echo ""
echo "#### Fastdownloadscript wurde geupdated! #################################"
fi
echo ""
echo "##########################################################################"
echo "#### Gehe über zum Gameserverstart! ######################################"
echo "#### Folgende Startparameter werden verwendet: ###########################"
echo "#### -ip $GS_IP ###################################################"
echo "#### -port $GS_PORT #########################################################"
echo "#### -game $GS_GAME ##########################################################"
echo "#### -tickrate $GS_TICKRATE #######################################################"
echo "#### -maxplayers_override $GS_MAXPLAYERS_OVERRIDE #############################################"
echo "#### Gamemod: Custom #####################################################"
echo "#### -mapgroup $GS_MAPGROUP ###################################################"
echo "#### FASTDL: On ##########################################################"
echo "##########################################################################"
echo ""
echo "##########################################################################"
echo "#### Führe Gameserverstart mit den Parametern durch! #####################"
echo "#### Bitte warten... #####################################################"
echo "##########################################################################"
echo ""
    cd $GS_GAMEPATH ; screen -AmdSL $NAME ./$GS_GAMEDAEMON $GS_GAMEPARAMS
   ;;
   esac
}

stop () {
   if ! status; then echo " ... $DESC $NAME konnte nicht gefunden werden. Läuft möglicherweise nicht"; exit 1; fi

   case "$usagetype" in
   root)
    tmp=$(su - $GS_GAMEUSER -c "screen -ls" | awk -F . "\$2 ~ /^$NAME[[:space:]].*/ {print \$1}" | awk '{print $1}')
    su - $GS_GAMEUSER -c "screen -r $tmp -X quit"
   ;;
   nonroot)
    screen -r $(screen -ls | awk -F . "\$2 ~ /^$NAME[[:space:]].*/ {print \$1}" | awk '{print $1}') -X quit
   ;;
   esac
}

status () {
   case "$usagetype" in
   root)
    su - $GS_GAMEUSER -c "screen -ls" | grep [.]$NAME[[:space:]] > /dev/null
   ;;
   nonroot)
    screen -ls | grep [.]$NAME[[:space:]] > /dev/null
   ;;
   esac
}

watch () {
   if ! status; then echo "$DESC $NAME konnte nicht gefunden werden. Läuft möglicherweise nicht"; exit 1; fi

   case "$usagetype" in
   root)
    tmp=$(su - $GS_GAMEUSER -c "screen -ls" | awk -F . "\$2 ~ /^$NAME[[:space:]].*/ {print \$1}" | awk '{print $1}')
    su - $GS_GAMEUSER -c "screen -r $tmp"
   ;;
   nonroot)
    screen -r $(screen -ls | awk -F . "\$2 ~ /^$NAME[[:space:]].*/ {print \$1}" | awk '{print $1}')
   ;;
   esac
}

case "$1" in
 start)
  echo "Starte $DESC: $NAME ..."
  start
  echo "Gameserver erfolgreich gestartet!"
 ;;

 stop)
  echo "Stoppe $DESC: $NAME ..."
  stop
  echo "Gameserver erfolgreich gestoppt!"
 ;;

 restart)
  echo "Starte $DESC: $NAME neu ..."
  status && stop
  echo "Neustart wird ausgeführt..."
  start
  echo "Gameserver erfolgreich neu gestartet!"
 ;;

 status)
  if status
  then echo "$DESC: $NAME ist online" 
  else echo "$DESC: $NAME ist offline"
  fi
 ;;
 watch)
  watch
 ;;

 *)
   echo "Befehle: $0 {start|stop|status|restart|watch}"
   exit 1
   ;;

esac


exit 0

Aber wie mache ich nun ein dynamisches Script daraus? Sprich mit Hauptscript und Script mit den Variablen?
Alles bis zum Kommentar Variablen Ende soll in das Nebenscript. Der Rest ins Hauptscript.

Mein Versuch mit dem Hauptscript und dem Nebenscript ist leider Fehlgeschlagen^^

Wisst ihr vllt ne Lösung?

LG
Killerkarnickel
 
Zuletzt bearbeitet:
Zurück