Anzeige:
Ergebnis 1 bis 4 von 4

Thema: bash: Parameteruebergabe und Expansion, verschachtelte Variablen

  1. #1
    Registrierter Benutzer
    Registriert seit
    05.02.2003
    Ort
    S
    Beiträge
    12

    bash: Parameteruebergabe und Expansion, verschachtelte Variablen

    Hallo,

    leider habe ich eine etwas allgemeinere Ueberschrift gewaehlt, weil ich nicht weiss, wie ich mein Programmierproblem genauer beschreiben soll.

    Folgendes Szenario: es sind 3 Rechner via ssh erreichbar, wobei man Rechner C nur von Rechner B und Rechner B nur von Rechner A aus erreichen kann. Rechner A ist der Gateway.
    Bisher musste man sich erst auf Rechner A einloggen, dann auf Maschine B usw.
    Um das alles zu vereinfachen, kann man eine ssh-Kette bilden nach dem Muster:

    Code:
    ssh -t user@gateway.example.com ssh -t user@server.example.com ssh -t user@server2.example.com
    Dabei gibt man nur noch die Passwoerter ein.

    Nun kann man dies mittels eines Shellskriptes so vereinfachen, dass man das Skript mit dem Rechnernamen als ersten Parameter aufruft und dann nur noch die Passwoerter eingeben muss und dann auf der entsprechenden Maschine eingeloggt ist. Also z.B.: "connect.sh server2".
    Das habe ich auch ganz nett mit 'case' geloest, wobei ich die Rechner zuvor in entsprechenden Variablen deklariert habe.

    Das sieht dann etwa so aus:
    Code:
    #!/bin/bash
    # connect.sh
    
    SSH_EX="ssh -t"
    
    GW="gateway.example com"
    SER="server.example.com"
    SER2="server2.example.com"
    
    case $i in
        gateway)
           $SSH_EX $GW
        ;;
        server)
            $SSH_EX $GW $SSH_EX $SER
        ;;
        server2)
            $SSH_EX $GW $SSH_EX $SER  $SSH_EX $SER2
        ;;
    esac
    Natuerlich sind im konkreten Fall mehr Maschinen vorhanden.
    Und wie man sieht, ist das Skript nicht sonderlich effizient, weil man bei Aenderungen in der Infrastruktur alles 2x aendern muss. Das ist nicht akzeptabel.

    Was ich mir vorstelle, ist so etwas:

    Code:
    #!/bin/bash
    # connect.sh
    
    SSH_EX="ssh -t"
    
    GATE="$SSH_EX gateway.example com"
    SERV="$GATE $SSH_EX server.example.com"
    SERV2="$SERV $SS_EX server2.example.com"
    
    # das funktioniert so nicht:
    $($1)
    Dabei wuerde ich das Skript dann gerne so aufrufen: "connect.sh SERV2".

    Aber wie mache ich der bash klar, dass sie das, was sie als Paramter bekommen hat, zu dem expandieren (und dann ausfuehren) soll, was in der Variable "SERV2" steht, ohne dass man eine Einzelfallunterscheidung trifft?

  2. #2
    Registrierter Benutzer
    Registriert seit
    05.02.2003
    Ort
    S
    Beiträge
    12
    Es wuerde alles ganz wunderbar mit "${}" funktionieren, wenn ich wuesste, wie ich den Wert von "$1" expandieren kann.

    edit: zur Erlaeuterung ... "${1}" liefert zwar den Wert des Parameters, aber expandiert wird nichts.
    Schreibe ich direkt "${GW}", dann wird das, was in der Variablen "GW" drinsteht auch ausgefuehrt.
    Ihr seht mein Problem, ja?

    edit: Gut, ich bin einen Schritt weiter. Wie uebergebe ich den Wert des 1. Parameters ("$1") an "${}"?
    Geändert von drunkenPenguin (10-04-2005 um 14:43 Uhr)

  3. #3
    Registrierter Benutzer
    Registriert seit
    05.02.2003
    Ort
    S
    Beiträge
    12

    Problem geloest

    gesucht war:
    Code:
    eval \${$1}
    Wer genauer nachlesen moechte, warum das so funktioniert, kann das hier tun.

  4. #4
    Registrierter Benutzer
    Registriert seit
    26.12.2002
    Ort
    Matrix
    Beiträge
    194
    oder so:

    $ A=B
    $ B=C
    $ echo ${!A}
    C


    -j

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •