parameter zählen und jeden einer variable zuordnen

nordi

nordi

Jungspund
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..
 
Zuletzt bearbeitet:
wie kann ich parameter zählen und sie einer variablen zuweisen?
Code:
var=$#

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)
Ich würde ja mit Abfragen arbeiten. (read)
Dann hast du für jede Position auch eine Variable, und kannst damit weiterarbeiten.
 
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
 
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?
 
Zuletzt bearbeitet:
@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?
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
 
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?
 
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.
 
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..
 

Ähnliche Themen

[Gelöst] Suchen und ersetzen mit Hilfe mehrerer Parameter

Dateien selektieren und zählen

Queue für copy Script

Shellskript - Fehler in Cron

Parameter einer Variable zuordnen

Zurück
Oben