ubuntuusers.de

Variabe aus Befehle setzen

Status: Gelöst | Ubuntu-Version: Nicht spezifiziert
Antworten |

wenze

Avatar von wenze

Anmeldungsdatum:
9. August 2006

Beiträge: 161

Wohnort: vergessen

Hallo,

was ist hier faul?

export test `su -  xxxadm -c /bin/sh -c "'echo \$dbms_type'"`; echo $test

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17605

Wohnort: Berlin

Der Fragesteller, der uns rätseln läßt. worum es geht?

Geraten: Es fehlt ein 'gleich'.

export test=$(su -  xxxadm -c /bin/sh -c "'echo \$dbms_type'")
echo $test

wenze

(Themenstarter)
Avatar von wenze

Anmeldungsdatum:
9. August 2006

Beiträge: 161

Wohnort: vergessen

Danke!

Zur Auflösung des Rätsels. Ich will ein Löschskript zum entfernen von SAP schreiben. Dafür muss ich mich als User SIDadm, oraSID, jeweils anmelden um zu schauen ob das SAP "oben" ist, um es zu stoppen und um mir weiterhin noch ein paart Variablen als der User SIDadm zu ziehen und um dann das überflüssige zu löschen.

das Ziehen des dbms_types klappt. Jetzt meckert aber der case ...

export dbms_type=$(su -  xxxadm -c /bin/sh -c "' echo \$dbms_type'");

case "$dbms_type" in
        oracle) rm  -f \/sapmnt/\${SAPSYSTEMNAME}\/bleder_test\*;;
esac

case: Too many arguments. Too many )'s. esac: Command not found.

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17605

Wohnort: Berlin

wenze schrieb:

... noch ein paart Variablen als der User SIDadm zu ziehen und um dann das überflüssige zu löschen.

Die Formulierung 'Variable ziehen' sagt mir ja gar nichts. Heißt das 'ansehen, auswerten' und wo sagt man das?

das Ziehen des dbms_types klappt. Jetzt meckert aber der case ...

export dbms_type=$(su -  xxxadm -c /bin/sh -c "' echo \$dbms_type'");

case "$dbms_type" in
        oracle) rm  -f \/sapmnt/\${SAPSYSTEMNAME}\/bleder_test\*;;
esac

Maskierungen verteilst Du so per Gießkanne/experimentell, oder?

Der Slash vor sapmnt bedarf keiner Maskierung.
blender_test ebensowenig
der vor SapSystemName scheint mir regelrecht fehlerzeugend, weil er die Auswertung der Variablen verhindert:

echo $HOME 
/home/stefan
echo \$HOME 
$HOME

wenze

(Themenstarter)
Avatar von wenze

Anmeldungsdatum:
9. August 2006

Beiträge: 161

Wohnort: vergessen

Ja mehr "experimentell", da ich mit der Maskierung so meine Probleme habe. Und ja ich meinte die Variable auswerten.

Danke jetzt läuft es. Bin aber für jeden Tipp, was verbessert werden sollte, dankbar.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#!/usr/bin/sh

set -x
#set -v
export SID=$1

export dbms_type=$(su -  $SID"adm" -c /bin/sh -c "' echo \$dbms_type'");
export SAPSYSTEMNAME=$(su -  $SID"adm" -c /bin/sh -c "' echo \$SAPSYSTEMNAME'");
export OSTYPE=$(su -  $SID"adm" -c /bin/sh -c "' echo \$OSTYPE'");

su -  $SID"adm" -c /bin/sh -c " 'R3trans -x'"

if [ "$?" = 0 ]
        then
                echo " SAP is already running "
fi
su -  $SID"adm" -c /bin/sh -c "
touch /sapmnt/${SAPSYSTEMNAME}/bleder_test;
touch /sapmnt/${SAPSYSTEMNAME}/bleder_test1;
touch /sapmnt/${SAPSYSTEMNAME}/bleder_test2;
touch /sapmnt/${SAPSYSTEMNAME}/bleder_test3;
ls -l /sapmnt/$SAPSYSTEMNAME;"

echo "Das ist die SID: "$SAPSYSTEMNAME
echo "Das ist der Datenbanktyp: "$dbms_type

case "$dbms_type" in
        db6) rm  -f /sapmnt/${SAPSYSTEMNAME}/bleder_test*;;
esac

ls -l /sapmnt/${SAPSYSTEMNAME}

user_unknown

Avatar von user_unknown

Anmeldungsdatum:
10. August 2005

Beiträge: 17605

Wohnort: Berlin

Kannst Du erklären wozu die ganzen exports gut sind?

Ich habe jetzt nicht nach Tricks Ausschau gehalten, aber diese vielen sus machen einen ganz wirr.

Wäre es nicht besser die sus alle bis auf eines zu eliminieren, welches man um das ganze Script hüllt, oder verpasse ich da was?

Auch überdreht scheint mir, mit su eine SHELL aufzurufen, und damit echo, um das Ergebnis dann einer Variablen zuzuweisen.

Meist ist HOME=$(echo $HOME) ja eine neutrale Operation, und HOME=$(someShell -c "echo \$HOME") ist nur noch eine zusätzliche Hülle.

#!/bin/bash 

set -x
#set -v
export SID=$1

function r3run () {
R3trans -x
if [ "$?" = 0 ]
then
        echo " SAP is already running "
fi

cd /sapmnt/${SAPSYSTEMNAME}
touch bleder_test bleder_test{1..3}
cd -
ls -l /sapmnt/$SAPSYSTEMNAME

echo "Das ist die SID: "$SAPSYSTEMNAME
echo "Das ist der Datenbanktyp: "$dbms_type

case "$dbms_type" in
        db6) rm  -f /sapmnt/${SAPSYSTEMNAME}/bleder_test*;;
esac

ls -l /sapmnt/${SAPSYSTEMNAME}
}

su - $SID"adm" r3run 

müsste m.E. das gleiche machen.

wenze

(Themenstarter)
Avatar von wenze

Anmeldungsdatum:
9. August 2006

Beiträge: 161

Wohnort: vergessen

Deine Idee gefällt mir ganz gut. Ich werde mal testen und versuchen mein Gelumpe damit aufzubauen.

Meine Probleme sind:

- Skript läuft als unprivilegierter User - ich brauche zum einen mehrere Umgebungsvariablen vom SIDadm (SAP-User) und Datenbank-User (datenbankanhängig) - bestimmte Stopp-Skripte müssen unter den User (z.B. SIDadm) laufen um SAP, ein paar Dienste und die Datenbank stoppen zu können - des weiten möchte ich halt nur bestimmte Sachen löschen, da ist es mir lieber, das mit dem Eigner zu machen - das ganze muss unter Liux, AIX, HPUX und Solaris laufen

Das sind so ein paar Punkte die mir das "Leben" schwer machen

Antworten |