hallo zusammen
bin im zusammenhang mit einem shell-script auf was "blödes" gestossen - nicht lachen.
schreibe ein script:
----schnipp---
passwd_dat=`cat /root/passwd-dat`
if test -s $passwd_dat
then
clear
echo " Der Pfad zu passwd-Datei ist nicht gesetzt !"
echo " Bitte den Pfad zu eingeben:"
read pass
echo "$pass" >/root/passwd-dat
passwd_dat=`cat /root/passwd-dat`
echo " Danke. Der Wert ist: $passwd_dat"
sleep 3
fi
----schnipp----
was muss ich (anders) machen, dass nicht der inhalt von passwd gelesen wird sondern in $passwd_dat der pfad zum file abgelegt wird?
lass ich das script laufen:
- fragt es nach dem pfad,
- den geb ich ein, wird sogar ins file /root/passwd-dat geschrieben + gespeichert (inhalt; /etc/passwd). - doch beim nächsten start werde ich wieder gefragt. ;-(
gruss und vielen dank ralf
Shell - Prog
Re: Shell - Prog
Hi!
Was bei dir passiert ist folgendes: Beim ersten Start wird passwd_dat auf "" gesetzt, weil /root/passwd-dat nicht existiert:
passwd_dat=`cat /root/passwd-dat`
Dann wird beim Test $passwd_dat durch nichts ersetzt (nicht durch ""!):
if test -s $passwd_dat
Also wird "test -s" ohne weiteres Argument aufgerufen, und das ergibt lustigerweise 0 (also "Erfolg"), obwohl es eigentlich natürlich ein völlig falscher Aufruf des Programms ist.
Wenn ich das richtig verstehe, ist der Test völlig falsch und müsste lauten (erste Zeile also weglassen):
if test ! -s /root/passwd-dat
Cheers,
GNU/Wolfgang
Was bei dir passiert ist folgendes: Beim ersten Start wird passwd_dat auf "" gesetzt, weil /root/passwd-dat nicht existiert:
passwd_dat=`cat /root/passwd-dat`
Dann wird beim Test $passwd_dat durch nichts ersetzt (nicht durch ""!):
if test -s $passwd_dat
Also wird "test -s" ohne weiteres Argument aufgerufen, und das ergibt lustigerweise 0 (also "Erfolg"), obwohl es eigentlich natürlich ein völlig falscher Aufruf des Programms ist.
Wenn ich das richtig verstehe, ist der Test völlig falsch und müsste lauten (erste Zeile also weglassen):
if test ! -s /root/passwd-dat
Cheers,
GNU/Wolfgang
Re: Shell - Prog
hallo wolfgang
erstmal danke für deine antwort. leider lösst sie mein problem nicht. ob ich mich zu "blöd" ausgedruckt habe ?
das script soll eigentlich wie folgt funktionieren (was es zum teil ja bereits macht):
- beim start den variablen werte zuweisen die es aus diversen text-files einliest. zb/root/passwort-dat
- existiert das file nicht, respektive hat einen inhalt =0 (leer), soll es den wert erfragen + und ablegen.
- existiert das file mit einem inhalt grösser 0, dann soll der inhalt des files (zb /root/passwd-dat) der variable zugeordnet werden (ohne frage nach dem wert).
zum beispiel (und hier vermute ich den "fehler"):
- eingabe zu der frage nach dem passwort-file:
/etc/passwd
- der wert wird gespeichert im file /root/passwd. (ist auch nach dem beenden des scripts noch da)
- script neu starten und schon werde ich wieder gefragt.
- trag ich nun zum beispiel: /etc/passwdx ein, so werde ich beim neustart des script nicht gefragt.
es scheint ein problem zusein, dass /etc/passwd ein file mit inhalt ist aber ich möchte nicht den inhalt sondern den pfad abspeichern, da ich im script über die variable den pfad brauche.
gruss ralf, der grübler
ps gebe es gerne zu, dass ich nicht so viel verstehe zu shell-scripts.
erstmal danke für deine antwort. leider lösst sie mein problem nicht. ob ich mich zu "blöd" ausgedruckt habe ?
das script soll eigentlich wie folgt funktionieren (was es zum teil ja bereits macht):
- beim start den variablen werte zuweisen die es aus diversen text-files einliest. zb/root/passwort-dat
- existiert das file nicht, respektive hat einen inhalt =0 (leer), soll es den wert erfragen + und ablegen.
- existiert das file mit einem inhalt grösser 0, dann soll der inhalt des files (zb /root/passwd-dat) der variable zugeordnet werden (ohne frage nach dem wert).
zum beispiel (und hier vermute ich den "fehler"):
- eingabe zu der frage nach dem passwort-file:
/etc/passwd
- der wert wird gespeichert im file /root/passwd. (ist auch nach dem beenden des scripts noch da)
- script neu starten und schon werde ich wieder gefragt.
- trag ich nun zum beispiel: /etc/passwdx ein, so werde ich beim neustart des script nicht gefragt.
es scheint ein problem zusein, dass /etc/passwd ein file mit inhalt ist aber ich möchte nicht den inhalt sondern den pfad abspeichern, da ich im script über die variable den pfad brauche.
gruss ralf, der grübler
ps gebe es gerne zu, dass ich nicht so viel verstehe zu shell-scripts.
Re: Shell - Prog
Hi!
Wenn ich dich richtig verstanden habe, sollte es mit "test -z" anstelle von "test -s" nimmst!
Gruß
Chris
Wenn ich dich richtig verstanden habe, sollte es mit "test -z" anstelle von "test -s" nimmst!
Gruß
Chris
Re: Shell - Prog
<blockquote><hr>
Wenn ich dich richtig verstanden habe, sollte es mit "test -z" anstelle von "test -s" nimmst!
<hr></blockquote>
Sollte natürlich heissen:
Wenn ich dich richtig verstanden habe, sollte es mit "test -z" anstelle von "test -s" funktionieren!
(-:
Wenn ich dich richtig verstanden habe, sollte es mit "test -z" anstelle von "test -s" nimmst!
<hr></blockquote>
Sollte natürlich heissen:
Wenn ich dich richtig verstanden habe, sollte es mit "test -z" anstelle von "test -s" funktionieren!
(-:
Re: Shell - Prog
hallo zusammen
danke allen für ihre hilfe. ich denke ich hab's.
anstelle von /etc/passwd ablegen lassen: etc/passwd ins ablage-file eintragen. also ohne führendes /. das funktioniert. und dann einfach mit /$passwd_dat im shript arbeiten.
ich hoffe, dass dies "sauber" ist.
nochmals allen danke und
gruss ralf
danke allen für ihre hilfe. ich denke ich hab's.
anstelle von /etc/passwd ablegen lassen: etc/passwd ins ablage-file eintragen. also ohne führendes /. das funktioniert. und dann einfach mit /$passwd_dat im shript arbeiten.
ich hoffe, dass dies "sauber" ist.
nochmals allen danke und
gruss ralf
Re: Shell - Prog
Hallo Ralf
Kannst du mir erklären für was dieser Umweg mit dem <b>ersten /</b> gut ist.
Danke Horst
Kannst du mir erklären für was dieser Umweg mit dem <b>ersten /</b> gut ist.
Danke Horst
Re: Shell - Prog
Das habe ich mich im April auch schon gefragt, sauber ist so etwas jedenfalls nicht!