• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[erledigt] Shellprogrammierung eventuell mit Arrays?

Moinsen,
folgende Situation.
Ich schreibe gerade an meinem ersten Shell-Script. Man gibt einen Benutzernamen ein und dieser Benutzer wird
mit entsprechenden Rechten und einem speziellen Daten-Ordner im Home-Verzeichnis angelegt.
Bis dahin noch keine grosse Sache.

Aber der Benutzer benötigt natürlich auch ein Passwort. Dieses Passwort soll nicht verschlüsselt sein und muss
auf jeden Fall genauso reproduzierbar sein, falls der User sein Passwort mal vergessen hat.
Für diese Situation hatte ich mir ein kleines JavaScript geschrieben, das jeden Buchstaben des Benutzernamens
einzelnd einliest und einer Zahl zuweist. Durch einen entsprechenden Algorithmus kam dann am Ende eine
mehrstellige Zahl heraus, die dann als Passwort benutzt wurde.
Über sicherheitsrelevante Aspekte reden wir hier mal nicht. ;-)

Mir recht es schon, wenn ich wüsste, wie ich auf jeden einzelnen Buchstaben der Eingabe zuzugreifen kann.

In JS hatte ich jedes Zeichen in ein Array eingelesen.

In der Shell ist es nun allerdings so, dass ich, wenn ich Enter drücke und die Eingabe in ein Array ablege, als
Wert 0 die gesamte Eingabe bekomme und nicht den ersten Buchstaben.

Wie gehe ich das an?

Danke
Souli
 
A

Anonymous

Gast
wird irgendwie nicht ganz klar was du genau machen willst. zeig mal ein paar Zeilen damit wir sehen wie dein Array aussieht und wie du es wo ansprichst. Wenn es darum geht einen String in einzelne Zeichen zu zerlegen, ist wohl auf der bash nicht sonderlich konfortabel. Folgendes fällt mir dazu ein. (ungetestet, hab gerade nur "Fenster" hier)
Code:
typeset -i i
while read EIN
do
   i=0
   while [ $i -lt ${#EIN} ] 
   do
       echo "${EIN:$i:1}"
       i=$i+1
   done
done
sollte eine Endlosschleife ergeben, Abbrechen mit STRG+C;
wartet auf eine Eingabe und wenn du sie mit Enter bestätigst, wird die Eingabe in einzelnen Zeichen zerlegt, die dann Zeilenweise ausgegeben werden.
Danach wartet er wieder auf Eingabe.

robi
 
Hi,
Du hast recht. Das Problem ist in der Tat sehr unglücklich
formuliert. Mittlerweile habe ich allerdings schon die fast
perfekte Lösung. ;-)

Von der Shell-Programmierung bin ich über Python nun
doch zu Perl gegangen und komme dort wesentlich
besser zurecht.

Das eine oder andere kleine Problem habe ich zwar noch
(irgend etwas ist ja immer...)
aber ich mache dafür dann einen neuen Thread auf, der
das Problem besser beschreibt und vor allem kann ich
meinen Code präsentieren.

Auf alle Fälle schon einmal Vielen Dank!
Souli
 
Python:
Code:
a = "Hallo"
for i in a:
    print i
Einfacher und sauberer als Perl (das ich aber auch trotzdem mag).

Hier das Ganze in bash:
Code:
#!/bin/bash

a="Hallo"

for (( i=0;i<${#a};i++ ))
do
    b[$i]=${a:$i:1}
done

for i in ${b[@]}
do
    echo $i
done
bash "mag" ich aber wesentlich weniger als Python oder Perl.
Es ist halt für die Arbeit mit Dateien und Systemarbeiten, also Installationen usw.. Dafür ist es gut; bei Datenverarbeitung kann es oft Hilfe gebrauchen, meist von awk oder Perl.
Auch den Array-Support gibt es in bash noch nicht so lange.

Gruß
 
Auch hierfür ein Thanx ;-)

Mit Perl habe ich mein Script nun soweit, dass ich einen Benutzernamen eingebe
und dann automatisch ein Passwort generiert wird, das der User dann angezeigt
bekommt (zum Aufschreiben).
Danach wird das Homeverzeichnis mit einem Unterordner (daten) sowie
entsprechender Rechtevergabe erstellt.
Abschliessend wird der User noch mit dem Passwort dem Samba-Account
hinzugefügt.
Man braucht also nur den Benutzernamen einmal einzugeben und der Rest
geschieht von alleine.

Lediglich die smb.conf muss ich jetzt noch um Einträge ergänzen.
Damit habe ich mich allerdings noch nicht beschäftigt. Das kommt dann die
nächsten Tage. ;-)

Souli
 
Oben