Bash-Scriptproblem

Seite 1 von 1 - Forum: Linux and other OS auf overclockers.at

URL: https://www.overclockers.at/linux/bash-scriptproblem_122379/page_1 - zur Vollversion wechseln!


COLOSSUS schrieb am 19.08.2004 um 23:39

Ich arbeite grade an einem recht kompakten User-Erstellungsskript fuer meinen Rootserver, das ich möglichst portabel halten will.

Das ganze soll als Shellscript innerhalb der Bash abarbeitbar sein. Allerdings stehe ich im Moment vor einem mittels meiner bescheidenen Bashscriptingkenntnisse unlösbarem Problem.

Ich habe eine Variable $JOBNAME, die n Werte annehmen kann. Weiters habe ich n Variablen, die als hinteren Teil ihres Variablennamen Strings enthalten, die dem Inhalt von $JOBNAME equivalent sind (Sie heißen folglich $JOB_OPTS_USERADD_${JOBNAME}).

Jetzt brauche ich den _Inhalt_ der Variable $JOB_OPTS_USERADD_${JOBNAME} als Argument für useradd - allerdings krieg ich das nicht hin.

Code:
echo ${JOB_OPTS_USERADD_${JOBNAME}}
zerwürfelt sich zu
Zitat
${JOB_OPTS_USERADD_${JOBNAME}}: bad substitution

Jemand Ideen, wie das zu lösen wäre, ohne case||if||eine andere Skriptsprache zu verwenden?

Tia für hilfreiche Hilfe hilfsbereiter Helfershelfer! ;)

- colo


that schrieb am 20.08.2004 um 12:54

Vielleicht gehts, wenn du den fertigen Namen in eine Zwischenvariable speicherst, dann löst du die Schachtelung auf.


DKCH schrieb am 20.08.2004 um 12:57

kannst du das problem vielleicht kurz an einem beispiel erläutern? ich meine zwar zu verstehen was du meinst, aber sicher bin ich nicht ;)


COLOSSUS schrieb am 20.08.2004 um 19:53

Code:
#Generische Variablen fuer verschiedene JOBS
JOB_OPTS_USERADD_WEBSPACE="-m -g kunde-webspace -s /bin/none $USERNAME"
JOB_OPTS_USERADD_SHELL="-m -g kunde-shell -s /bin/bash $USERNAME"
JOB_OPTS_USERADD_GAMESERVER="-m -g games -s /bin/none $USERNAME"
JOB_OPTS_USERADD_SUUSER="-m -g users,wheel -s /bin/bash $USERNAME"

[...anderweitiger Code...]

user_create()
{
  #Eigentliche Erstellungsfunktion fuer Useraccounts (noch non-workable)
  job_banner_print
  echo "Erstelle User $USERNAME mit Ruleset: $JOBNAME"
  echo $JOB_OPTS_USERADD_${JOBNAME}
  sleep 10
}

Code:
  echo $JOB_OPTS_USERADD_${JOBNAME}
- die echo-Anweisung ist nat. nur zu debug-zwecken im Skript, wird in der "finalen" Version dann durch Useradd mit entsprechenden Parametern ersetzt.


gue schrieb am 20.08.2004 um 20:09

Indirekte Referenzen auf Variablen ;)
Siehe: http://www.tldp.org/LDP/abs/html/ivr.html

Code:
user_create()
{
  #Eigentliche Erstellungsfunktion fuer Useraccounts (noch non-workable)
  job_banner_print
  echo "Erstelle User $USERNAME mit Ruleset: $JOBNAME"
  MYJOB="JOB_OPTS_USERADD_${JOBNAME}"
  eval JOB=\$$MYJOB
  echo $JOB
  sleep 10
}


COLOSSUS schrieb am 20.08.2004 um 20:31

Danke! :)

Werd's damit versuchen, sieht nach der passenden Lösung aus. Hab dich lieb :x ;)




overclockers.at v4.thecommunity
© all rights reserved by overclockers.at 2000-2025