bash-script Nachhilfe (=?iso-8859-15?q?Parameter=FCbergabe?=)
Hallo allerseits, hoffe mal nicht allzu OT zu sein! habe hier ein Script das eine Funktion aufruft: . /etc/myLTSPtv_functions #Fkt. wird korrekt eingebunden und im weiteren abgearbeitet if [ "{$splash_check}" == "y" -a -f /proc/splash ] ; then let "progress+=1" splash "$progress" fi die Funktion übernimmt den Parameter auch ganz brav, aber ich müsste ihr mehrere Parameter mitgeben! z.B.: splash "$progress" "$bla" oder so ähnlich Geht das überhaupt? Wenn ja wie und kennt jemand von euch eine gute Doku in Deutsch (ausgenommen man-Pages da mir die einfach zu heavy sind) danke für Hilfe mfg mIke -- Ich kann gar nicht so viel saufen, wie ich kotzen will.
Am Freitag, 5. November 2004 22:14 schrieb Michael Messner:
Hallo allerseits,
hoffe mal nicht allzu OT zu sein! habe hier ein Script das eine Funktion aufruft:
. /etc/myLTSPtv_functions #Fkt. wird korrekt eingebunden und im weiteren abgearbeitet if [ "{$splash_check}" == "y" -a -f /proc/splash ] ; then let "progress+=1" splash "$progress" fi
die Funktion übernimmt den Parameter auch ganz brav, aber ich müsste ihr mehrere Parameter mitgeben!
z.B.:
splash "$progress" "$bla" oder so ähnlich
Geht das überhaupt? ja natürlich! einfach so hinschreiben.
Bsp: ---------------- foo() { arg1=$1 arg2=$2 echo "1=$arg1 2=$arg2" } foo a b ------------ Argumente werden mittels $1 ... $9 angesprochen. in der bash auch noch ${10}, ${11}, .... ansonsten: --------------- foo() { for f in $* do echo "$f" done } foo 1 foo 1 2 foo 1 2 3 .... ---------------
Wenn ja wie und kennt jemand von euch eine gute Doku in Deutsch (ausgenommen man-Pages da mir die einfach zu heavy sind) Das Original-Papier der Sprache shell des Herrn Borune: http://laku19.adsl.netsonic.fi/era/unix/shell.html und das Buch: Helmut Herold. Unix-Shells. UNIX und seine Werkzeuge. Addison-Wesley, 2 edition, 1996. Heisst inzwischen Linux-Shells
Bye Jürgen -- Dr.rer.nat. Juergen Vollmer, Viktoriastrasse 15, D-76133 Karlsruhe Tel: +49(721) 9204871 Fax: +49(721) 24874 Juergen.Vollmer@informatik-vollmer.de www.informatik-vollmer.de Internet-Telefonie: www.skype.com Benutzer: juergen.vollmer
Hallo, Am Freitag, 5. November 2004 22:32 schrieb Dr. Jürgen Vollmer:
Am Freitag, 5. November 2004 22:14 schrieb Michael Messner:
. /etc/myLTSPtv_functions #Fkt. wird korrekt eingebunden und im weiteren abgearbeitet if [ "{$splash_check}" == "y" -a -f /proc/splash ] ; then let "progress+=1" splash "$progress" fi
die Funktion übernimmt den Parameter auch ganz brav, aber ich müsste ihr mehrere Parameter mitgeben!
z.B.:
splash "$progress" "$bla" oder so ähnlich
Geht das überhaupt?
ja natürlich! einfach so hinschreiben.
....Aufrufendes Scritp ..... . /etc/myLTSPtv_functions ..... ##sscripts: sscripts=`/bin/grep splash_check etc/rc.sysinit etc/rc.d/myLTSPtv_01 | /usr/bin/wc -l` ..... #Fkt-Aufruf: ..... splash "$progress" "$sscripts" #Funktion: function splash(){ THEME=current _shutdown="no" _silent="no" test "`cat /proc/splash |grep silent`" && _silent="yes" progress=$1 sscripts=$2 echo "test=$2" .... } Hab ich da irgendwas übersehen? So funktioniert es leider nicht!
Das Original-Papier der Sprache shell des Herrn Borune: http://laku19.adsl.netsonic.fi/era/unix/shell.html
Bevorzugen tue ich Bücher:
und das Buch: Helmut Herold. Unix-Shells. UNIX und seine Werkzeuge. Addison-Wesley, 2 edition, 1996. Heisst inzwischen Linux-Shells
Kennst du evtl. davon eine Leseprobe? Leider sind Fachbücher einfach so teuer dass ich mir keines mehr kaufe ohne mal daraus gelesen zu habe. mfg mIke -- Bevor es Mißverständnisse gibt: Ja, ich bin willenloser Lustsklave der Göttin "Versionitis", und für ein 'ß' hinter der Versionsnummer tue ich _alles_ [Ratti in suse-linux]
Am Freitag, 5. November 2004 23:07 schrieb Michael Messner:
....Aufrufendes Scritp ..... . /etc/myLTSPtv_functions ..... ##sscripts: sscripts=`/bin/grep splash_check etc/rc.sysinit etc/rc.d/myLTSPtv_01
| /usr/bin/wc -l`
..... #Fkt-Aufruf: ..... splash "$progress" "$sscripts"
#Funktion:
function splash(){ THEME=current _shutdown="no" _silent="no" test "`cat /proc/splash |grep silent`" && _silent="yes" progress=$1 sscripts=$2 echo "test=$2" .... }
Hab ich da irgendwas übersehen? keine Ahnung So funktioniert es leider nicht! da ich nicht weiss was das ganze soll, kann ich auch nix sagen. Tip zum Debuggen:
set -x am Anfang des Scripts setzen.
Bevorzugen tue ich Bücher:
und das Buch: Helmut Herold. Unix-Shells. UNIX und seine Werkzeuge. Addison-Wesley, 2 edition, 1996. Heisst inzwischen Linux-Shells
Kennst du evtl. davon eine Leseprobe? nein, irgendeine Uni-Bibliothek oder im guten Buchhandel
Leider sind Fachbücher einfach so teuer dass ich mir keines mehr kaufe ohne mal daraus gelesen zu habe.
diese Buch ist zumindest für mich DIE Referenz, da es sehr viele Shells beschreibt. Es ist natürlich kein Anleitung zum Programmieren, das sollte man schon können. Jürgen -- Dr.rer.nat. Juergen Vollmer, Viktoriastrasse 15, D-76133 Karlsruhe Tel: +49(721) 9204871 Fax: +49(721) 24874 Juergen.Vollmer@informatik-vollmer.de www.informatik-vollmer.de Internet-Telefonie: www.skype.com Benutzer: juergen.vollmer
Hallo Jürgen und David, Am Samstag, 6. November 2004 00:18 schrieb Dr. Jürgen Vollmer:
Am Freitag, 5. November 2004 23:07 schrieb Michael Messner:
Hab ich da irgendwas übersehen?
keine Ahnung
hatte weiter vorne im Script bereits einen Fehler, dadurch wurde die Bedingung für die Funktion nicht mehr erfüllt und somit auch kein Wunder dass es nicht funktionierte! Vielen Dank mfg mIke -- Linux und Laptops: http://tuxmobile.org http://www.linux-on-laptops.com/ http://www.buzzard.org.uk/toshiba/index.html
Hallo, Am Fri, 05 Nov 2004, Michael Messner schrieb:
....Aufrufendes Scritp ..... . /etc/myLTSPtv_functions ..... ##sscripts: sscripts=`/bin/grep splash_check etc/rc.sysinit etc/rc.d/myLTSPtv_01 | /usr/bin/wc -l` ..... #Fkt-Aufruf: ..... splash "$progress" "$sscripts"
Ok. Aeh, geht das auch in lesbar? BTW: du suchst 'grep -c' statt 'grep ... | wc -l'.
#Funktion:
function splash(){
'function' funktioniert nicht ueberall.
THEME=current _shutdown="no" _silent="no" test "`cat /proc/splash |grep silent`" && _silent="yes"
useless use of cat, useless use of test. grep -q 'silent' /proc/splash && _silent="yes"
progress=$1 sscripts=$2
Zuweisungen an shell-Variablen sollte man praktisch immer quoten. Ausserdem ist es dem Verstaendnis des Lesers eines scriptes hilfreich, die Parameter am Anfang "auszulesen".
echo "test=$2" .... }
Hab ich da irgendwas übersehen? So funktioniert es leider nicht!
Glaub ich dir nicht. Versuch's mal so: ==== splash() { progress="$1" sscripts="$2" THEME=current _shutdown="no" grep -q 'silent' /proc/splash && _silent="yes" || _silent="no" echo "sscripts='$sscripts'" } splash 10 2 ====
Das Original-Papier der Sprache shell des Herrn Borune: http://laku19.adsl.netsonic.fi/era/unix/shell.html
Bevorzugen tue ich Bücher:
Druck dir 'man bash' aus ;) man -Tps bash > /tmp/bash.1.ps man -Tps builtin > /tmp/bash_builtins.1.ps Sind nur 52 Seiten. Und nochmal 14 fuer die builtins. Als Booklet umformatiert und zweiseitig gedruckt nur noch 17 Blatt ;) Und dann gibt's da natuerlich das Bash-Prog-Intro-HOWTO und den "Advanced Bash-Scripting Guide" (LDP: abs / abs-guide). Kruschtel mal auf linuxdoc.org. -dnh, der sich man bash nicht ausgedruckt hat. -- Hunde haben ein Herrchen oder Frauchen - Katzen ihr Personal
On Fri, Nov 05, 2004 at 10:32:00PM +0100, Dr. Jürgen Vollmer wrote:
Am Freitag, 5. November 2004 22:14 schrieb Michael Messner:
. /etc/myLTSPtv_functions #Fkt. wird korrekt eingebunden und im weiteren abgearbeitet if [ "{$splash_check}" == "y" -a -f /proc/splash ] ; then
^^ Bist Du sicher, daß Du nicht ${splash_check} meinst?
foo() { arg1=$1 arg2=$2
Dann doch lieber: arg1="$1" arg2="$2" Quoting ist nicht so schmerzhaft wie gemeinhin angenommen, kann aber einigen Ärger ersparen ;-)
foo() { for f in $*
for i in "$@" damit funktioniert dann auch z.B. foo arg1 "arg2 mit Leerzeichen" arg3 f -- Gravity is a myth, the Earth sucks.
participants (4)
-
David Haller
-
Dr. Jürgen Vollmer
-
Florian Tham
-
Michael Messner