parameter zählen und jeden einer variable zuordnen

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von nordi, 16.01.2008.

  1. #1 nordi, 16.01.2008
    Zuletzt bearbeitet: 16.01.2008
    nordi

    nordi Jungspund

    Dabei seit:
    10.12.2006
    Beiträge:
    13
    Zustimmungen:
    0
    hallo shell-freunde.
    ich befasse mich nur in meiner freizeit mit shellscripten, stehe aber nun vor einem problem, bei dessen lösung ich ein wenig professionelle hilfe bräuchte.

    ich rufe ein script mit n parametern (n namen und eine telefonnummer ) auf. hier meine bisherigen bemühungen:
    Code:
    if [ -n $4 ]; then
      number="$4"
      name="$1 $2 $3"
    elif [ -n $3 ]; then
      number="$3"
      name="$1 $2"
    elif [ -n $2 ]; then
      number="$2"
      name="$1"
    elif [ -n $1 ]; then
      number="$1"
      name="$1"
    else
      echo "Bitte Namen und Telefonnummer eingeben!<br>Es dürfen maximal drei alphabetische und ein numerischer String eingegeben werden.<br><br>Z.B.: Max Mustermann Handy 017166554321"
    fi
    
    dieses impliziert allerdings, dass nur drei namen und eine nummer eingegeben werden können. gut, ich könnte das ganze weiter spinnen, bin mir aber sicher, dass es elegantere lösungen gibt.

    nun meine fragen:

    wie kann ich parameter zählen und sie einer variablen zuweisen? meine in etwa so:
    Code:
    nparms=$#
    echo "${$nparms}"
    wobei echo dann in diesem beispiel den letzten parameter ausgeben soll und nicht $4 oder so...

    wie mach ich es mit ner schleife, dass der letzte parameter $nummer zugeordnet wird (oder besser noch: alle vorher nach nem nummernstring durchsucht werden).
    und alle anderen $name zugegeordnet werden (oder besser noch: $name-1, $name-2, ... , $name-n)

    bin gespannt auf euere antworten..
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. P17

    P17 Schandensbegrenzer

    Dabei seit:
    06.12.2007
    Beiträge:
    196
    Zustimmungen:
    0
    Ort:
    Germany
    Code:
    var=$#
    Ich würde ja mit Abfragen arbeiten. (read)
    Dann hast du für jede Position auch eine Variable, und kannst damit weiterarbeiten.
     
  4. #3 Wolfgang, 16.01.2008
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Hallo
    Was du willst sind lexikalische Variablenzuweisungen.
    Aber das ist in keiner mir bekannten Programmiersprache eine gute Idee.
    Das ist nämlich immer sauber zu umgehen.
    Schau dir mal getops an. Suchmaschine deiner Wahl wird dir helfen. ;)
    Findet auch Das hier
    Du hast zwar nicht gesagt, welche Shell du verwendest. Aber ich schlussfolgere aus deinem Beitrag, dass es keine exotische ist, und dein Wissen ausreicht, mit meinem Hinweis etwas anfangen zu können. ;)
    Gruß Wolfgang
     
  5. #4 nordi, 17.01.2008
    Zuletzt bearbeitet: 17.01.2008
    nordi

    nordi Jungspund

    Dabei seit:
    10.12.2006
    Beiträge:
    13
    Zustimmungen:
    0
    Erstmal danke ich euch für die Hinweise.

    @17
    "var=$#" sagt mir ja nur, dass n Parameter übergeben wurden (also in meinem Beispiel var=4). Doch zusätzlich hätte ich gern, bei unbekannter anzahl, jedem einer Variable zugewiesen.

    @Wolfgang
    Das ist der hinweis, den ich suchte, jedoch ist "getopts" meiner shell unbekannt. es ist keine exotische, sondern ne "normale" Shell. Das ganze ist für die Fritzbox 7170, die getops leider nicht kennt. Gibts da evtl noch nen alternativen Lösungsweg?
     
  6. #5 Wolfgang, 17.01.2008
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Was bitte ist eine normale Shell?
    Bash ksh ash cshell ...:think:

    Also für eine Bash könnte folgende Hilfskrücke für dich hilfreich sein.
    Hier extra ausführlich, damit du siehst wie es gemeint ist.
    Die Parameter werden einfach in umgekehrter reihenfplge in ein Array gesteckt, dann ist Index 1 immer der letzte Parameter.
    Code:
    #cat test.sh
    #!/bin/bash
    anz=$#;
    while [  $# -gt 0 ] ;do
    
            A[$#]="$1"
            shift;
    done
    echo "Last Parameter Nr. $anz Value ${A[1]}"
    echo "Other Parameter:"
    for (( i=$anz;$i > 1 ; ((i--)) ));do
            echo Parameter : ${A[$i]};
    done
    
    Gibt beim Aufrum folgendes aus:
    Code:
    Last Parameter Nr. 3 Value 0364-22789
    Other Parameter:
    Parameter : Name Vorname
    Parameter : next Name
    
    
    
    Damit solltest du klarkommen.

    Gruß Wolfgang
     
  7. nordi

    nordi Jungspund

    Dabei seit:
    10.12.2006
    Beiträge:
    13
    Zustimmungen:
    0
    mit der "normalen" shell meinte ich /bin/sh (wusste net, wie ich die sonst nennen sollte).
    deswegen hilft die hilfskrücke (für die ich dir trotzdem danke) leider auch nicht.
    vielleicht noch ne idee, oder belasse ichs bei meinem komischen if-konstrukt?
     
  8. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  9. #7 Wolfgang, 18.01.2008
    Wolfgang

    Wolfgang Foren Gott

    Dabei seit:
    24.04.2005
    Beiträge:
    3.978
    Zustimmungen:
    0
    Ort:
    Erfurt
    Wo ist das Problem?
    Das Prinzip ist doch klar.
    Ich habe dir nur gezeigt, wie du die Parameter in umgekehrter Reihenfolge in ein Array füllst, so dass index 1 immer dein letzter Parameter (Telefonnummer) ist. Der Rest sind dann deine Namen.
    Damit sparst du dir die ganze Abfragerei.
    Das läuft garantiert auch auf deiner Shell, solange /bin/sh nicht ein Link auf eine c-shell ist. (was sehr unwahrscheinlich ist)
    Geht z.B. auch auf einer fritzbox.
     
  10. nordi

    nordi Jungspund

    Dabei seit:
    10.12.2006
    Beiträge:
    13
    Zustimmungen:
    0
    irgendwie schein ich das mit den arrays noch net kapiert zu haben.
    es kamen folgende meldungen die mich gleich erschlugen:
    Code:
    + anz=4
    + [ 4 -gt 0 ]
    + A[4]=name1
    cmd_adcontact: cmd_adcontact: 1: A[4]=name1: not found
    + shift
    + [ 3 -gt 0 ]
    + A[3]=name2
    cmd_adcontact: cmd_adcontact: 1: A[3]=name2: not found
    + shift
    + [ 2 -gt 0 ]
    + A[2]=name3
    cmd_adcontact: cmd_adcontact: 1: A[2]=name3: not found
    + shift
    + [ 1 -gt 0 ]
    + A[1]=07775653
    cmd_adcontact: cmd_adcontact: 1: A[1]=07775653: not found
    + shift
    + [ 0 -gt 0 ]
    cmd_adcontact: cmd_adcontact: 12: Syntax error: Bad substitution
    
    ansonsten macht es seine arbeit und das prinzip leuchtet ein. werd nachher mal mein gehirn einschalten und versuchen es zu begreifen..
     
Thema:

parameter zählen und jeden einer variable zuordnen

Die Seite wird geladen...

parameter zählen und jeden einer variable zuordnen - Ähnliche Themen

  1. Parameter zählen

    Parameter zählen: Hi @ all! Ich bin absoluter Shell-Neuling und steh gleich vor einem schier unlösbar scheinenden Problem: ich rufe in Script mit unbestimmt...
  2. Programm start mit null oder einem parameter und ein paar zahlen

    Programm start mit null oder einem parameter und ein paar zahlen: hi mein problem denke für euch nen kleines für mich ein großes bin dabei C zu lernen und schreibe ein programm was mit ein paar parametern...
  3. [Gelöst] Suchen und ersetzen mit Hilfe mehrerer Parameter

    [Gelöst] Suchen und ersetzen mit Hilfe mehrerer Parameter: Hallo zusammen, ich bin an einem Punkt angekommen, wo ich nicht mehr weiter komme und hoffe ihr könnt mir weiter helfen. Anbei ein Ausschnitt aus...
  4. Parameternutzung in Funktionen

    Parameternutzung in Funktionen: Hallo, vielleicht hat jemand eine Idee. Es sollen UNIX-Kommandos aus einer Funktion heraus aufgerufen werden, die Optionen werden mit...
  5. UseFBDev-parameter bei der xorg.conf

    UseFBDev-parameter bei der xorg.conf: hallo zusammen ich frage mich gerade, was der parameter "UseFBDev" genau bedeutet? tönt irgendwie selbsterklärend, ist es aber scheinbar nicht......