PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Script: Wert für $1 setzen



michiS
12.09.06, 11:15
Hallo,
Ist es möglich, bei sh-scripts, einen Wert für $1 zu setzen?

Michi

marce
12.09.06, 11:18
am einfachsten über einen Parameter beim Start des Scriptes...

... oder wie meinen?

Painkiller
12.09.06, 11:58
Stell dir vor du hast:



#/bin/sh

befehl --parameter=$1


Das kannst du starten mit ./script 3 dann wird 3 als $1 gesetzt. Oder was meinst du?

bert2002
12.09.06, 12:14
Dann bleibt ja nur noch eine möglichkeit (ja die man abwandeln kann):


#!/bin/bash
1=wert

marce
12.09.06, 12:19
bash test
test: line 2: 1=5: command not found

~ # more test
#!/bin/bash
1=5

echo $1

Apoll
12.09.06, 13:42
[pwr@marvin][~]$ bash
pwr@marvin:~$ echo $0
bash
pwr@marvin:~$ set wert wert2
pwr@marvin:~$ echo $1
wert
pwr@marvin:~$ echo $2
wert2
pwr@marvin:~$

Steht alles in 'man bash' unter 'SHELL BUILTIN COMMANDS'.

marce
12.09.06, 13:47
klar - nur hat der TE immer noch nicht erzählt, was er denn nun genau will...

ein
script.sh wert1 wert2 ... setzt $1 und $2 auch...

bert2002
12.09.06, 14:01
bash test
test: line 2: 1=5: command not found

~ # more test
#!/bin/bash
1=5

echo $1

Verdammt dann geht das ja doch nicht mit den teilen. Mist :cool:

michiS
12.09.06, 14:30
Sorry, hab mich wohl un deutlich ausgedrückt:
Das $1 beim Start des Scriptes einen Wert kriegt ist klar.
Meine Frage ist: Kan ich den im Script ändern?
Was ich damit will ist das wenn der user das script ohne Argument startet, das dan eine zenity-nachfrage kommt, deren Ausgabe-Wert dan in $1 gespeicher wird.
Hab das mit:

1 = "$(zenity ....)"
porbiert, ging aber nicht!

michiS
12.09.06, 14:31
Noch ne Frage:
(Wie) kann ich am besten in einem Script das Script selbst bearbeiten (eine Variablen definition ändern)?

Apoll
12.09.06, 14:52
Hab das mit:

1 = "$(zenity ....)"
porbiert, ging aber nicht!
Ich hab schon weiter oben die richtige Antwort gegeben.


(Wie) kann ich am besten in einem Script das Script selbst bearbeiten (eine Variablen definition ändern)?
Da fallen mir nur Textwerkzeuge, wie sed/awk/grep/cut ein.
Kann aber sehr schnell zu Fehlern führen, wenn sich ein Script selbst bearbeitet, während es ausgeführt wird.

Der Gestreifte
12.09.06, 14:56
Meine Frage ist: Kan ich den im Script ändern?Wieso beharrst du so sehr auf dem skriptweiten arbeiten mit "$1"?
Schreib doch einfach den Wert in $1 in eine Variable, mit der Du den Rest des Skripts oder vielleicht sogar in anderen Skripten arbeitest.


(Wie) kann ich am besten in einem Script das Script selbst bearbeitenMit "sed"....
..oder wie meinen?


(eine Variablen definition ändern)?Meinst Du den Typ einer Variable (dann "typeset" oder "declare", im Grunde aber eh überflüssig) oder der Wert, der ihr zugeordnet wird (dann siehe oben).

michiS
12.09.06, 15:03
Danke!


Mit "sed"....
..oder wie meinen?

Zitat:
(eine Variablen definition ändern)?
Meinst Du den Typ einer Variable (dann "typeset" oder "declare", im Grunde aber eh überflüssig) oder der Wert, der ihr zugeordnet wird (dann siehe oben).

Da fallen mir nur Textwerkzeuge, wie sed/awk/grep/cut ein.
Kann aber sehr schnell zu Fehlern führen, wenn sich ein Script selbst bearbeitet, während es ausgeführt wird.
Werds probieren, solange ich nur dinge bearbeite die bereits ausgeführt wurden, sollte es gehen, oder?

suck
12.09.06, 15:43
Werds probieren, solange ich nur dinge bearbeite die bereits ausgeführt wurden, sollte es gehen, oder?Das Script wird beim Starten in den Speicher gelesen. Die Änderungen werden erst bei einem neuen Aufruf wirksam - also nicht schon zur Laufzeit!

Apoll
12.09.06, 21:03
Das Script wird beim Starten in den Speicher gelesen. Die Änderungen werden erst bei einem neuen Aufruf wirksam - also nicht schon zur Laufzeit!

Dann sollte das aber nicht funktionieren:

#!/bin/bash
echo "aktuelles script: $0"
echo "echo 'sollte nicht zu sehen sein'" >> $0
echo "EOF"

suck
12.09.06, 21:12
Dann sollte das aber nicht funktionierenWTF!! ..aber man sollte nicht fluchen, wenn man was dazugelernt hat. Danke!

michiS
17.12.06, 19:34
Nochmal eine Frage zu 'set':
Wie kann ich die Werte am einfachsten verschieben; d.h. : den Wert von $1 löschen; den Wert von $2 auf $1 kopieren; den Wert von $3 auf $2 kopieren...
Mit einer for? Oder giebt es eine einfachere Lösung?

Michi

marce
17.12.06, 19:38
mit shift...