ubuntuusers.de

Variable von Skript a and Skript b übergeben

Status: Ungelöst | Ubuntu-Version: Kein Ubuntu
Antworten |

ryu2k6

Anmeldungsdatum:
14. Juni 2009

Beiträge: 271

Hi zusammen,

Habe ein Frage bezüglich Variablen. Und zwar möchte ich von einem Skript, nennen Wir es db_install.sh mit der Variablen db_name. Diese wird eingeben, z.B.

1
2
echo "Geben Sie den Datenbank namen ein"
read db_name

Die Variable auch in einem anderen Skript verwenden.

z.B.

1
echo "Ihr Datenbank Name lautet $db_name"

Kann mir einer sagen, ob das Funktioniert? wenn ja wie?

Danke

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13166

ryu2k6 schrieb:

Hi zusammen,

Habe ein Frage bezüglich Variablen. Und zwar möchte ich von einem Skript, nennen Wir es db_install.sh mit der Variablen db_name. Diese wird eingeben, z.B.

1
2
echo "Geben Sie den Datenbank namen ein"
read db_name

Die Variable auch in einem anderen Skript verwenden.

z.B.

1
echo "Ihr Datenbank Name lautet $db_name"

Kann mir einer sagen, ob das Funktioniert? wenn ja wie?

Ich nehme mal an, Du willst das zweite Skript vom ersten aus aufrufen. Man könnte das über die Umgebung transportieren (siehe export in der bash und anderen Bourne-Shells). Das ist zwar einfach, hat aber den Nachteil total unoffensichtlich zu sein und Du erzeugst eine enge Abhängigkeit zwischen den beiden.

Besser ist es, wenn Du es als Parameter übergibst. Dann kann das zweite Skript auch von anderen aufgerufen werden. Entweder nimmst Du dafür einen Positionsparameter oder Du analysierst die Optionen mit getopts.

1
2
3
4
$ ./v1.sh nnn
Ihr Datenbank Name lautet nnn
$ ./v2.sh -n nnn
Ihr Datenbank Name lautet nnn

Variante 1: Positionsparameter

1
2
3
4
5
6
#!/bin/dash

db_name="$1"
shift

echo "Ihr Datenbank Name lautet $db_name"

Variante 2: Option

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
#!/bin/dash

while getopts ':n:' opt; do
  case "$opt" in
  n)    db_name="$OPTARG"
        ;;
  *)    echo "ERROR: unknown option $OPTARG" >&2
        exit 1
        ;;
  esac
done

shift $((OPTIND - 1))

echo "Ihr Datenbank Name lautet $db_name"

Ciao

robert

ryu2k6

(Themenstarter)

Anmeldungsdatum:
14. Juni 2009

Beiträge: 271

Hi,

Danke für deine Hilfe. Versteh ich das Richtig, wenn ich version 1 verwenden möchte gebe ich nicht an es so an :

1
2
$ ./v1.sh $db_name
Ihr Datenbank Name lautet nnn

Denn der Name der Db wird erst ausgefüllt, wenn Skript 1 läuft

Verstehst du was ich meine?

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13166

ryu2k6 schrieb:

Danke für deine Hilfe.

Bitte, gerne!

Versteh ich das Richtig, wenn ich version 1 verwenden möchte gebe ich nicht an es so an :

1
2
$ ./v1.sh $db_name
Ihr Datenbank Name lautet nnn

Denn der Name der Db wird erst ausgefüllt, wenn Skript 1 läuft

Doch, genau so machst Du es. Skript 1 kann so aussehen:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12

# code...

db_name='nnn'

# mehr code...

# Variante 1
script-2 "$db_name"

# Variante 2
script-2 -n "$db_name"

Ciao

robert

tahr09

Anmeldungsdatum:
5. Januar 2011

Beiträge: 946

Hallo,

oder so:

Script 1:

1
2
3
4
5
6
7
8
#! /bin/bash

# Name der Datenbank erfragen
echo "Gebe den Namen der Datenbank ein:"
read db_name

#Schreibe Variable in versteckte Datei
echo "$db_name" >$HOME/.vari

Script 2:

1
2
3
4
5
6
7
#! /bin/bash

#Variable aus Datei importieren
db_name=`cat $HOME/.vari`

#Name der Datenbank ausgeben
echo "Die Datenbank heißt $db_name"

lg

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13166

Julian92 schrieb:

oder so:

("Versteckte" Datei)

Der Ansatz hat Nachteile:

  • Die Datei wird in Deinem Code nicht gelöscht.

  • Wenn die übertragenen Daten sicherheitsrelevant sind, wird hier unnötigerweise eine persistente Spur auf dem Datenträger hinterlassen.

  • Platten-IO wird erzeugt, der generell langsam ist.

  • Es ist genau so eine versteckte Abhängigkeit wie beim direkten Export der Variable (beide müssen den Dateinamen kennen).

  • Sehr problematisch, wenn mehrere Skripte parallel ausgeführt werden.

Dementsprechend rate ich ab, so etwas zu bauen.

Ciao

robert

noisefloor Team-Icon

Anmeldungsdatum:
6. Juni 2006

Beiträge: 29567

Hallo,

soll das ein einmaliger Transfer der Variabel sein?

Liest sich eigentlich nicht so... Wenn der Name einmal festgelegt wird und dann aus anderen Skripten immer wieder ausgelesen wird, dann bietet sich hier doch ganz stark eine Datei an, in der die Konfiguration (=der Name) gespeichert wird.

Gruß, noisefloor

Antworten |