Dynamische Variablen in Shellscript ?

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
vobie
Beiträge: 195
Registriert: 29.08.2003 21:14:50

Dynamische Variablen in Shellscript ?

Beitrag von vobie » 06.08.2006 22:28:53

hi,

ich schon wieder,

eine frage.
ist es möglich das sich ein shellscript dynamische variable merken kann ?

also, das script wird das erstemal aufgerufen und fragt nach z.b einen path.
dieser wird nach eingabe in eine variable

Code: Alles auswählen

startverzeichnis
gespeichert.

das script wird abgearbeitet und beendet sich.

nach erneutem start des scripts soll die beim ersten start eingegebene variable als vorgabe
den wert enthalten die beim ersten start eingegeben wurde.diese soll sich aber auch neu eingeben lassen. ist das möglich ?
also das script müsste sich selbst modifizieren können.

gruß
vobie
Es gibt keine dummen Fragen. Aber leider viele dumme Antworten.

Benutzeravatar
meandtheshell
Beiträge: 4054
Registriert: 14.01.2005 17:51:30

Beitrag von meandtheshell » 06.08.2006 22:48:22

Einfach in ein file schreiben und auch davon lesen ODER bash environment Variablen setzen wobei dein Fall eher nach der File Variante klingt.

Könntest du Dein Vorhaben etwas genauer erläutern?

Den Code evtl. auf NoPaste stellen und den Link hier posten - evtl. kannst du mit einem meiner templates was anfangen http://nopaste.debianforum.de/3849 - line 66 might be of you interest :)

markus

/edit
discovered a funny litte thing :mrgreen:
Mein Firefox mit der Extension glaubt doch das Parameter Varibalen etwas mit dem Amerikanischen Dollar zu tun haben - ist natürlich nonsense!
Zuletzt geändert von meandtheshell am 06.08.2006 23:02:40, insgesamt 2-mal geändert.

vobie
Beiträge: 195
Registriert: 29.08.2003 21:14:50

Beitrag von vobie » 06.08.2006 23:00:48

meandtheshell hat geschrieben:Einfach in ein file schreiben und auch davon lesen.

markus
hi,
habe ich auch schon gemacht, aber kann sich ein script auch selbst modifizieren ?

1 start
#variable
startverzeichnis=
dateiname=
......usw.
dann einagbe durch den user
path /blabla/bla datei xyz usw

2.start
path /blabla/bla steht schon als vorgabe
datei xyz steht schon als vorgabe
#variable
startverzeichnis=/blabla/bla
dateiname=xyz
......usw.
user ändert z.b. den path in /EIN/NEUES/VERZEICHNIS usw.

3. start
path /EIN/NEUES/VERZEICHNIS steht schon als vorgabe
usw.

gruß
vobie

hir mal das script ist noch in arbeit
http://nopaste.debianforum.de/3850
Zuletzt geändert von vobie am 06.08.2006 23:23:59, insgesamt 1-mal geändert.
Es gibt keine dummen Fragen. Aber leider viele dumme Antworten.

Benutzeravatar
meandtheshell
Beiträge: 4054
Registriert: 14.01.2005 17:51:30

Beitrag von meandtheshell » 06.08.2006 23:12:48

Wärend der Laufzeit oder wie? Sonst macht deine Fragen nicht viel Sinn. Du hast den shell code in einem file stehen also $read_up.

Programmlogik (dein script und alle "Befehle" darin) und Programmdaten soll man immer trennen. Wenn du Information über einen "run" hinaus aufheben willst dann leg die information in in file. Willst du information nur während dem aktuellen run haben dann $read_up_line_66.

markus

/edit
- Bitte stelle dein script nach NoPaste
- Und BTW der Programmierstil ist nicht gut - du hast keine Kapselung mit Hilfe von z.B. Funktionen etc. Bei Änderungen, Erweiterungen und Debuging eine Katastrophe. Auch wird der Code so leicht um den Faktor n länger.

vobie
Beiträge: 195
Registriert: 29.08.2003 21:14:50

Beitrag von vobie » 06.08.2006 23:28:44

meandtheshell hat geschrieben:Wärend der Laufzeit oder wie? Sonst macht deine Fragen nicht viel Sinn. Du hast den shell code in einem file stehen also $read_up.

Programmlogik (dein script und alle "Befehle" darin) und Programmdaten soll man immer trennen. Wenn du Information über einen "run" hinaus aufheben willst dann leg die information in in file. Willst du information nur während dem aktuellen run haben dann $read_up_line_66.

markus

/edit
- Bitte stelle dein script nach NoPaste
- Und BTW der Programmierstil ist nicht gut - du hast keine Kapselung mit Hilfe von z.B. Funktionen etc. Bei Änderungen, Erweiterungen und Debuging eine Katastrophe. Auch wird der Code so leicht um den Faktor n länger.
bin noch Anfänger was shellscript angeht, habe mir das grundgerüst von http://www.linuxfibel.de/bashprog.htm geholt
gruß
vobie :oops:
Es gibt keine dummen Fragen. Aber leider viele dumme Antworten.

Benutzeravatar
meandtheshell
Beiträge: 4054
Registriert: 14.01.2005 17:51:30

Beitrag von meandtheshell » 06.08.2006 23:39:02

@vobie
Du bist Anfänger - na und - kein Problem - jeder fängt irgendwann einmal an.
Ein gute Link http://www.tldp.org/LDP/abs/html/index.html

Nur um das Prinzip herauszustreichen:
Wenn jemand mit mehr Erfahrung einem anderen mit weniger etwas sagt ist das eine gute Sache. Wie sonst soll man etwas lernen. Meine Hinweiße klingen ja nur so als ob vom Drillinstructor im Bootcamp kommend weil ich keine Zeit habe hier Honig zu verteilen ;)

Sei froh das Du jetzt Hinweiße bekommst was Du besser machen kannst als später wenn Du Dich an etwas gewöhnt hast - das umlernen fällt dann viel schwerer. Das jeder die gleichen Fehler machen soll beim erlernen von irgendetwas ... also davon halten ich nur bedingt etwas.

REEEEEEEEECHTS um - MAAAAAAAARSCH
Bild
:mrgreen:

markus

vobie
Beiträge: 195
Registriert: 29.08.2003 21:14:50

Beitrag von vobie » 06.08.2006 23:49:54

habe ich auch als gut gemeinen hinweis aufgefasst :wink:

bleibt aber immernoch die frage, können scripte sich (zur laufzeit) selbst modifizieren ?
und beim nächsten start eben diese modifikationen anwenden ?

1 start ---------> werte werden vom script in sich selbst geschrieben und gespeichert
2 start ---------> das script benutzt die werte aus dem ersten aufruf

gruß
vobie
Es gibt keine dummen Fragen. Aber leider viele dumme Antworten.

Benutzeravatar
meandtheshell
Beiträge: 4054
Registriert: 14.01.2005 17:51:30

Beitrag von meandtheshell » 07.08.2006 00:00:09

vobie hat geschrieben: bleibt aber immernoch die frage, können scripte sich (zur laufzeit) selbst modifizieren ?
Habe ich oben IMHO gesagt. Ja du kannst "Text ersetzen" aber da shell code linear durchlaufen wird (von oben nach unten) hilft dir das nicht sehr viel. Du kannst noch Information in Variablen der Prozess Umgebung speichern - hilft Dir auch nicht sehr viel da mit dem run ende auch diese mit dem gesarteten Prozess verschwinden.

Also IMHO wurde alles gesagt. Das was du möchtest ist nicht sehr sinnvoll. Mach ein extra File für diesen Zweck das bei der Initialisierung geladen wird und gut ist. In das file gibts du eine Variable dir einen Wert hat der am Ende des ersten Durchlauft umgesetzt wird - nenne es flag wenn du willst. Alles was du dann noch brauchst ist ein if clause der darauf reagiert welchen Status dein flag hat.

markus

Benutzeravatar
meandtheshell
Beiträge: 4054
Registriert: 14.01.2005 17:51:30

Beitrag von meandtheshell » 08.08.2006 17:34:42

Es gibt wohl eine Technik/Möglichkeit um das zu machen was Du willst, obgleich ich denke das es overkill ist für Deine Zwecke warum ich auch zu obigen Vorgehen mit dem File geraten habe.

Du könntest eine Technik Metaprogramming genannt verwenden http://en.wikipedia.org/wiki/Metaprogra ... ramming%29

markus

Benutzeravatar
chabayo
Beiträge: 930
Registriert: 17.08.2005 07:44:33
Lizenz eigener Beiträge: Artistic Lizenz

Beitrag von chabayo » 08.08.2006 17:49:39

Mal so aus Spass an der Freude...


...mein erster Gedanke war wohl auch das "Metaprogramming", obwohl ich den Begriff noch nicht kannte.

Meinte kurz das erste im Script waere gewesen sich selbst in ein Temp-File zu kopieren, und aus sich heraus selbiges aufzurufen, und dann am Ende mit sed die Entsprechende Variable zu aendern und in das Ursprungsfile auszugeben.

Das Problem das bei meinem Modell nicht ganz hinhauen taete waere, das sed auch den Parameter des eigenen Aufrufes aendern wuerde - muesste man deshalb ein bisschen an der Expression rumhakeln, hiesse aber nicht das dies unmoeglich waere, auch wenn mir immo keine Loesung dazu einfiel. :twisted:


chab

[edit]ja, wohl ein gewagtes post *grins*
Watt about the non-digital!?

vobie
Beiträge: 195
Registriert: 29.08.2003 21:14:50

Beitrag von vobie » 08.08.2006 22:42:44

hi,

nicht schlecht !

das ganze soll ja auch nicht unbedingt für das iso-mount script sein, war nur mal ein gedanke ob das überhaupt geht.

da ich ja noch anfänger im scripten bin, probiere ich alles mögliche einfach mal aus ( nur so kann ich was dazu lernen :wink: ), mir gehen da ne menge dinge durch den kopf :roll: .

es gibt so schööööne komandozeilen programme und scripte (z.b. abcde oder lxdvdrip usw.) wo ich mir denke, warum nicht mal das ganze grafisch etwas aufpeppen. da ich mir schlecht parameter und deren syntax merken kann, baue ich mir eben für diese kleinen helferlein ein GUI und lerne nebenbei noch was. :roll: dialog, xdialog usw. wollen ja auch ihre daseinsberechtigung haben


gruß
vobie
Es gibt keine dummen Fragen. Aber leider viele dumme Antworten.

Benutzeravatar
meandtheshell
Beiträge: 4054
Registriert: 14.01.2005 17:51:30

Beitrag von meandtheshell » 08.08.2006 23:55:39

@vobie
Dein Vorgehen finde ich recht gut. Widme dich ruhig einmal ein halbes Jahr der shell (bash programmierung) und diversen command line tools wie
- sed
- gawk
- eigentlich alles was Du hier findest http://www.linuxfibel.de/kapitel7.htm bis auf vi und emacs (das ist eine eigene Baustelle)

Wenn Du damit recht sicher bist gehst du einen Schritt weiter und widmest dich 1 Jahr lang Python. Dann solltest du auch an C und C++ nicht scheitern.

Das ganze GUI Zeug würde ich mir für Python aufheben und mich damit nicht auf der bash mit "dialog" herumquälen. Eines gilt allerdings für alle programmier Aktivitäten - guter Stil und Übersichtlichkeit sind das A und O.
http://de.wikipedia.org/wiki/Programmierstil

markus

Antworten