BASH: variable Variable ? (dynamisch..)

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Simon74
Beiträge: 69
Registriert: 06.10.2009 22:21:07

BASH: variable Variable ? (dynamisch..)

Beitrag von Simon74 » 02.06.2013 14:37:36

Hallo.

Ich sehe im moment die Bäume nicht mehr, vielleicht kann mir hier jemand auf die Sprünge helfen.

Aufruf der Funktion:

Code: Alles auswählen

show_service /usr/sbin/ntpd ntpd
Die Funktion:

Code: Alles auswählen

show_service (){
	if [ -f $1 ]; then
		PID=`pidof $2`
		if [ ! -z $PID ]; then
			???="Ein"
		else
			???="Aus"
		fi
	else
		???="NotInst."
	fi
}
Gewünschte Rückgabevariable:
??? in show_service soll den Namen resultierent aus $2 erhalten, also in diesem Fall "ntpd"
Wie kann ich also den Variablennamen "ntpd" (dynamisch aus $2) erzeugen ?

Benutzeravatar
Phineas
Beiträge: 354
Registriert: 20.06.2012 20:26:19

Re: BASH: variable Variable ? (dynamisch..)

Beitrag von Phineas » 02.06.2013 15:02:17

Sieh Dir mal "eval" an.

Ich kann mir aber kaum vorstellen, dass dynamische Variablennamen zu irgendwas taugen. Vielleicht suchst Du ein assoziatives Array.

Simon74
Beiträge: 69
Registriert: 06.10.2009 22:21:07

Re: BASH: variable Variable ? (dynamisch..)

Beitrag von Simon74 » 02.06.2013 15:05:55

Die Lösung (danke Phineas für den Hinweis).

Ich habe mich verannt da ntp mit 2 Namen arbeitet:
Service ist: /etc/init.d/ntp
PID kommt jedoch von "ntpd"

:-)

So gehts es nun:
Aufruf:

Code: Alles auswählen

show_service ntp ntpd /usr/sbin/ntpd
Funktion:

Code: Alles auswählen

show_service (){
	if [ -f $3 ]; then
		PID=`pidof $2`
		if [ ! -z $PID ]; then
			eval ${1}="Ein"
		else
			eval ${1}="Aus"
		fi
	else
		eval ${1}="NotInst."
	fi
}

Benutzeravatar
Phineas
Beiträge: 354
Registriert: 20.06.2012 20:26:19

Re: BASH: variable Variable ? (dynamisch..)

Beitrag von Phineas » 02.06.2013 15:23:57

:D

Ok, so geht es auch. Ohne eval, bietet sich es in der Bash so an:

Aufruf:

Code: Alles auswählen

ntp=$(show_service ntpd /usr/sbin/ntpd)
Funktion:

Code: Alles auswählen

show_service (){
	if [ -f $2 ]; then
		PID=`pidof $1`
		if [ ! -z $PID ]; then
			echo "Ein"
		else
			echo "Aus"
		fi
	else
		echo "NotInst."
	fi
}

Simon74
Beiträge: 69
Registriert: 06.10.2009 22:21:07

Re: BASH: variable Variable ? (dynamisch..)

Beitrag von Simon74 » 02.06.2013 15:35:52

Für sauberste Lösung empfunden :THX:

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: BASH: variable Variable ? (dynamisch..)

Beitrag von Cae » 02.06.2013 17:43:57

Das sieht danach aus, als gaebe es mehrere Typen dieser Art, ntpd, sshd, httpd und so weiter. Da bietet sich ein Array an (wo man dann im Gegensatz zu den vorherigen Loesungen tatsaechlich die Bash braucht):

Code: Alles auswählen

#!/bin/bash

show_service() {
	if [ -f $2 ]; then
		PID=`pidof $1`
		if [ ! -z $PID ]; then
			services[$2]="Ein"
		else
			services[$2]="Aus"
		fi
	else
		services[$2]="NotInst."
	fi
}

declare -A services

show_service ntp
show_service ssh
echo "NTP: ${services[ntp]} | SSH: ${services[ssh]}"
(ungetestet, aber anhand der Manpage entwickelt, sollte also stimmen)

Gruss Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

Antworten