Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

argument uebergabe

11 views
Skip to first unread message

Michael Maier

unread,
Nov 17, 2004, 4:48:13 AM11/17/04
to
Hallo.

Ich moechte, dass ein User einen Befehl in folgendem Format eingeben muss.
Dabei ist die Angabe von Parameter zwingend!
Wenn der Benutzer keine Parameter eingibt soll er darauf hingewiesen werden

Ich habe das so geloest:

if ["$1" -ne ""]
then
echo "Argument fehlt! Format: Befehl name \"Text\" "
exit 1
fi

Es funktioniert wunderbar, wenn der Benutzer nur den Befehl eingibt. Wenn
allerdings die Eingabe mit Parameter erfolgt, dann schreibt er die Meldung

line 12: [name: command not found

Hat jemand einen Loesungsvorschlag fuer mich.

danke
lg
Michael


Heike C. Zimmerer

unread,
Nov 17, 2004, 4:57:25 AM11/17/04
to
Michael Maier <xi...@gmx.at> writes:

> if ["$1" -ne ""]

if [ "$1" -ne "" ]
^ ^
> then


Gruß,

Heike

Achim Peters

unread,
Nov 17, 2004, 4:59:04 AM11/17/04
to
Michael Maier wrote:

> if ["$1" -ne ""]
> then
> echo "Argument fehlt! Format: Befehl name \"Text\" "
> exit 1
> fi
>
> Es funktioniert wunderbar, wenn der Benutzer nur den Befehl eingibt. Wenn
> allerdings die Eingabe mit Parameter erfolgt, dann schreibt er die Meldung
>
> line 12: [name: command not found
>
> Hat jemand einen Loesungsvorschlag fuer mich.

Ein Blank nach dem [ einfügen.

HTH

Bye
Achim

Heike C. Zimmerer

unread,
Nov 17, 2004, 4:59:52 AM11/17/04
to
Michael Maier <xi...@gmx.at> writes:

> if ["$1" -ne ""]

if [ "$1" -eq "" ]
^ ^^^ ^
> then


Gruß,

Heike

Dominik Pusch

unread,
Nov 17, 2004, 5:02:03 PM11/17/04
to
Heike C. Zimmerer wrote:

> Michael Maier <xi...@gmx.at> writes:
>
>> if ["$1" -ne ""]
>
> if [ "$1" -eq "" ]
> ^ ^^^ ^

hatte eben mit aehnlichem Problem zu tun. Hab's auch erst so versucht
und er hat mich IIRC angemeckert, dass er Integer erwartet. Hab das
-eq dann einfach durch ein = ersetzt

Stefan Wiens

unread,
Nov 17, 2004, 11:08:05 PM11/17/04
to
Michael Maier <xi...@gmx.at> schrieb:

> if ["$1" -ne ""]

Daß das Kommando "[" nur erkannt wird, wenn es mit Leerraum umgeben
ist, wurde bereits geschrieben.

> then
> echo "Argument fehlt! Format: Befehl name \"Text\" "
> exit 1
> fi

Fehlermeldungen werden üblicherweise auf stderr anstatt auf stdout
ausgegeben, also:

echo "Argument fehlt! Format: Befehl name \"Text\" " >&2

Heike C. Zimmerer

unread,
Nov 18, 2004, 1:39:41 AM11/18/04
to
Dominik Pusch <domini...@koeln.de> writes:

> Heike C. Zimmerer wrote:
>
>> if [ "$1" -eq "" ]
>> ^ ^^^ ^
>
> hatte eben mit aehnlichem Problem zu tun. Hab's auch erst so versucht
> und er hat mich IIRC angemeckert, dass er Integer erwartet. Hab das
> -eq dann einfach durch ein = ersetzt

Ja, stimmt. Das habe ich übersehen.

Gruß,

Heike

Roland Jacob

unread,
Nov 18, 2004, 3:16:21 AM11/18/04
to
Hi Michael Maier. Du schriebst hier:

>Ich moechte, dass ein User einen Befehl in folgendem Format eingeben muss.
>Dabei ist die Angabe von Parameter zwingend!
>Wenn der Benutzer keine Parameter eingibt soll er darauf hingewiesen werden

[ -z $1 ] && echo "...

Gruß und HTH, Jac

--
Manche Menschen haben einen Gesichtkreis vom Radius Null.
Sie nennen das ihren Standpunkt.
[David Hilbert, Mathematiker]

Helmut Hullen

unread,
Nov 18, 2004, 11:16:00 AM11/18/04
to
Hallo, Roland,

Du (r_jacob) meintest am 18.11.04:

>> Ich moechte, dass ein User einen Befehl in folgendem Format
>> eingeben muss. Dabei ist die Angabe von Parameter zwingend!
>> Wenn der Benutzer keine Parameter eingibt soll er darauf
>> hingewiesen werden

> [ -z $1 ] && echo "...

[ -z "$1" ] && echo "...

Viele Grüße!
Helmut

Lothar Paltins

unread,
Nov 18, 2004, 2:04:30 PM11/18/04
to
Helmut Hullen wrote:

> Du (r_jacob) meintest am 18.11.04:
>

>> [ -z $1 ] && echo "...
>
> [ -z "$1" ] && echo "...

[[ -z $1 ]] && echo "...

--
Lothar Paltins lpne...@freenet.de

Helmut Hullen

unread,
Nov 18, 2004, 3:11:00 PM11/18/04
to
Hallo, Lothar,

Du (lpnews01) meintest am 18.11.04:

>>> [ -z $1 ] && echo "...
>>
>> [ -z "$1" ] && echo "...

> [[ -z $1 ]] && echo "...

Dann schon eher
test "$1" || echo ...

Sieht mir eher nach einem direkten Weg aus.

Viele Grüße!
Helmut

Lothar Paltins

unread,
Nov 18, 2004, 4:58:54 PM11/18/04
to
Helmut Hullen wrote:

> Dann schon eher
> test "$1" || echo ...
>
> Sieht mir eher nach einem direkten Weg aus.

Eben gerade nicht! "[[ expression ]]" ist ein direktes Shell-Command,
"test" oder "[" sind Funktionen, wenn auch builtins. Der Performancevorteil
wird daher gering sein, aber "[[ expression ]]" ist einfacher zu handhaben
und es ist leistungsfähiger als test. Es findet kein Word splitting and
keine pathname expansion statt, Variablennamen brauchen also nicht gequotet
zu werden. Sehr praktisch ist auch, dass "==" und "!=" einen Pattern Match
und nicht einen einfachen String-Vergleich machen.

Lothar
--
Lothar Paltins lpne...@freenet.de

Oliver Lehmann

unread,
Nov 18, 2004, 5:29:15 PM11/18/04
to
Lothar Paltins wrote:

> [[ -z $1 ]] && echo "...

$ [[ -z a ]] && echo
[[: not found
$ uname -srm
FreeBSD 4.10-STABLE i386
$

--
Oliver Lehmann
http://www.pofo.de/
http://wishlist.ans-netz.de/

Heike C. Zimmerer

unread,
Nov 18, 2004, 5:55:26 PM11/18/04
to
Lothar Paltins <lpne...@freenet.de> writes:

> Helmut Hullen wrote:
>
>> Dann schon eher
>> test "$1" || echo ...
>>
>> Sieht mir eher nach einem direkten Weg aus.
>
> Eben gerade nicht! "[[ expression ]]" ist ein direktes Shell-Command,
> "test" oder "[" sind Funktionen, wenn auch builtins. Der Performancevorteil
> wird daher gering sein, aber "[[ expression ]]" ist einfacher zu handhaben
> und es ist leistungsfähiger als test.

[[ hat ein Problem: Es ist nicht portabel. Du müsstest also schon die
Shell nennen, die du meinst, wenn du seine Vorteile aufzählst. SUSv3
kennt "[[" nicht.


Gruß,

Heike

Roland Jacob

unread,
Nov 19, 2004, 2:29:15 AM11/19/04
to
Hi Helmut Hullen. Du schriebst hier:

>Hallo, Roland,
>
>Du (r_jacob) meintest am 18.11.04:

>>[ -z $1 ] && echo "...


>
> [ -z "$1" ] && echo "...
>
>Viele Grüße!
>Helmut

Barum? $1 ist per definitionem genau ein Wort. In der
Bash zumindest funkt's.

Gruß, Jac

--
"Schweigen ist feige, Reden ist Gold."
Marius Müller-Westernhagen

Uwe Waldmann

unread,
Nov 19, 2004, 9:44:46 AM11/19/04
to

Roland Jacob <r_j...@syscomp.de> schreibt:

> Hi Helmut Hullen. Du schriebst hier:
> > Du (r_jacob) meintest am 18.11.04:
> >
> > > [ -z $1 ] && echo "...
> >
> > [ -z "$1" ] && echo "...
>
> Warum? $1 ist per definitionem genau ein Wort.

Ohne Anführungszeichen findet hier Word splitting statt, und dann
können da beliebig viele Wörter stehen.

> In der Bash zumindest funkt's.

Setze mal probehalber $1 auf '= -z' oder '-eq a'. Das eine gibt ein
falsches Ergebnis, das andere eine Fehlermeldung.

Uwe

Oliver Lehmann

unread,
Nov 19, 2004, 11:58:11 AM11/19/04
to
Uwe Waldmann wrote:

> Setze mal probehalber $1 auf '= -z' oder '-eq a'. Das eine gibt ein
> falsches Ergebnis, das andere eine Fehlermeldung.

oder vergess einfach mal das uebergeben eines Parameters....

Wenn ich in ksh(88) z.B. gerne aussteigen will wenn $1 leer ist (wobei man
wohl eher $# abchecken wuerde in der Realitaet)

> [ -z $1 ] && echo ups
ksh: test: 0403-004 Specify a parameter with this command.

Lothar Paltins

unread,
Nov 19, 2004, 4:22:01 PM11/19/04
to
Heike C. Zimmerer wrote:

> [[ hat ein Problem: Es ist nicht portabel. Du müsstest also schon die
> Shell nennen, die du meinst, wenn du seine Vorteile aufzählst. SUSv3
> kennt "[[" nicht.

Sorry, ich vergaß zu erwähnen, dass das ksh Syntax ist. Kommt davon, dass
ich seit 15 Jahren an keinem System mehr war, dass nicht wenigstens eine
ksh88 oder einen Nachbau davon (pdksh oder bash) hatte. Und wenn, dann
hätte ich sofort eine ksh nachinstalliert. Wer das nicht kann oder darf,
hat leider Pech gehabt und muss sich mit test und allen anderen
Restriktionen der Bourne Shell herumschlagen.

Juergen P. Meier

unread,
Nov 21, 2004, 4:13:09 AM11/21/04
to
Lothar Paltins <lpne...@freenet.de>:

Dich sollte man mit GNUismen bewerfen, bis du diese Haltung _hier_
aufgibst ;)

Juergen
--
Juergen P. Meier - "This World is about to be Destroyed!"

Lothar Paltins

unread,
Nov 21, 2004, 5:22:52 AM11/21/04
to
Juergen P. Meier wrote:

> Dich sollte man mit GNUismen bewerfen, bis du diese Haltung _hier_
> aufgibst ;)

Aua, die fliegen mir schon um die Ohren ;-). Allerdings fühle ich mich zu
Unrecht beworfen, ist dir das denn nicht GNU-ig genug:

NAME
bash - GNU Bourne-Again SHell

SYNOPSIS
bash [options] [file]

COPYRIGHT
Bash is Copyright (C) 1989-2002 by the Free Software Foundation, Inc.

Außerdem heißt die Gruppe de.comp.os.unix.shell, nicht de.comp.os.gnu.shell.
Da darf ich doch auch ungestraft die ksh erwähnen, oder?

Juergen P. Meier

unread,
Nov 21, 2004, 10:23:19 AM11/21/04
to
Lothar Paltins <lpne...@freenet.de>:

> Außerdem heißt die Gruppe de.comp.os.unix.shell, nicht de.comp.os.gnu.shell.
> Da darf ich doch auch ungestraft die ksh erwähnen, oder?

Natuerlich. Aber genauso wenig wie hier GNUsche Sonderlocken
erwuenscht sind (sofern nicht ausdruecklich gekennzeichnet ;) sind
auch ksh-Sonderlocken erwuenscht - ohne explizite Kennzeichnung.

Sonst fange ich hier mit Co-Prozessen an und bringe alle Linux-User
zur Verzweiflung ;)

(So wie z.B. in http://jors.net/jor/scripts/adrtest.ksh, das nur mit
der ksh funktioniert.)

Christian Schneider

unread,
Nov 21, 2004, 10:43:34 AM11/21/04
to
Thus spake Juergen P. Meier (nospa...@jors.net):

> Lothar Paltins <lpne...@freenet.de>:
>> Außerdem heißt die Gruppe de.comp.os.unix.shell, nicht de.comp.os.gnu.shell.
>> Da darf ich doch auch ungestraft die ksh erwähnen, oder?
>
> Natuerlich. Aber genauso wenig wie hier GNUsche Sonderlocken
> erwuenscht sind (sofern nicht ausdruecklich gekennzeichnet ;) sind
> auch ksh-Sonderlocken erwuenscht - ohne explizite Kennzeichnung.
>
> Sonst fange ich hier mit Co-Prozessen an und bringe alle Linux-User
> zur Verzweiflung ;)
>
> (So wie z.B. in http://jors.net/jor/scripts/adrtest.ksh, das nur mit
> der ksh funktioniert.)

Funktioniert auch mit der Zsh.
--
There are those who are born UNIX, | Christian 'strcat' Schneider
those who are made UNIX, | Email.......: str...@gmx.net
and those who become UNIX | GPG-ID......: 47E322CE
for the kingdom of heaven's sake. | "...I drank WHAT!!?"

Lothar Paltins

unread,
Nov 21, 2004, 12:30:26 PM11/21/04
to
Juergen P. Meier wrote:

> Natuerlich. Aber genauso wenig wie hier GNUsche Sonderlocken
> erwuenscht sind (sofern nicht ausdruecklich gekennzeichnet ;) sind
> auch ksh-Sonderlocken erwuenscht - ohne explizite Kennzeichnung.

Wie gesagt, Shell ist für mich ein Synonym für die ksh, deshalb vergaß ich
das zunächst zu erwähnen. Aber ich habe das ja nachgeholt.

> Sonst fange ich hier mit Co-Prozessen an und bringe alle Linux-User
> zur Verzweiflung ;)

Meinst du ksh Co-Prozesse, also sowas wie

command |& ?

Wo soll da ein Problem sein? Was hat das mit Linux zu tun? Verwende ich
ausgiebig, auch unter Linux.

> (So wie z.B. in http://jors.net/jor/scripts/adrtest.ksh, das nur mit
> der ksh funktioniert.)

Was erwartest du denn? Ein Script mit Namen adrtest.ksh, bei dem in der
ersten Zeile "#!/bin/ksh" steht, soll das mit der Bourne-Shell, der csh
oder der was-weiß-ich-sh laufen? Es gibt eben in mehr als 30 Jahren eine
gewisse Weiterentwicklung und es gibt User, die das auch nutzen wollen und
dafür auf eine absolute Kompatibilität verzichten.

Juergen P. Meier

unread,
Nov 21, 2004, 2:05:12 PM11/21/04
to
Lothar Paltins <lpne...@freenet.de>:

> Juergen P. Meier wrote:
>
> Meinst du ksh Co-Prozesse, also sowas wie
>
> command |& ?
>
> Wo soll da ein Problem sein? Was hat das mit Linux zu tun? Verwende ich
> ausgiebig, auch unter Linux.

In der Bash? Bestimmt nicht. Die grosse Mehrzahl der Linux-Nutzer
verwendet die Bash. Und auch bei anderen Unixdistributionen ist diese
Shell immer weiter verbreitet. Daher laesst sich durchaus Linux mit
Bash gleichsetzen. Vor allem hier (Die Zahl der Postings, in denen es
ausdruecklich um Linux-probleme mit $SHELL != /bin/bash ging, duerfte
verschwindend gering sein).

> Was erwartest du denn? Ein Script mit Namen adrtest.ksh, bei dem in der
> ersten Zeile "#!/bin/ksh" steht, soll das mit der Bourne-Shell, der csh
> oder der was-weiß-ich-sh laufen? Es gibt eben in mehr als 30 Jahren eine

Das man scripte nicht nur ueber exec() starten kann, sollte dir
bewusst sein.

> gewisse Weiterentwicklung und es gibt User, die das auch nutzen wollen und
> dafür auf eine absolute Kompatibilität verzichten.

Versuche es damit:

$ /bin/bash adrtest.ksh blaf...@jors.net

Du wirst ebenso einen Syntaxfehler erhalten, wie mit einer
bourne-Shell.

Immerhin bin ich so nett, und geben die ksh vor - ich haette auch
/bin/sh verwenden koennen, und bei mir den Symlink /bin/sh von bash
auf ksh zeigen lassen.

PS: kann das sein, das dein Humordetektor defekt ist?

Heike C. Zimmerer

unread,
Nov 22, 2004, 4:20:25 AM11/22/04
to
Lothar Paltins <lpne...@freenet.de> writes:

> Juergen P. Meier wrote:
>
>> Natuerlich. Aber genauso wenig wie hier GNUsche Sonderlocken
>> erwuenscht sind (sofern nicht ausdruecklich gekennzeichnet ;) sind
>> auch ksh-Sonderlocken erwuenscht - ohne explizite Kennzeichnung.
>
> Wie gesagt, Shell ist für mich ein Synonym für die ksh, deshalb vergaß ich
> das zunächst zu erwähnen. Aber ich habe das ja nachgeholt.

Ja, mehr hatte ich mit meinem Einwurf auch nicht beabsichtigt. Der
Dialekt ist bei Shells für weniger Geübte halt nicht sofort erkennbar
(das unterscheidet sie von Bayern und Sachsen).

Gruß,

Heike

Juergen P. Meier

unread,
Nov 22, 2004, 4:54:12 AM11/22/04
to
Heike C. Zimmerer <usene...@hczim.de>:

> Ja, mehr hatte ich mit meinem Einwurf auch nicht beabsichtigt. Der
> Dialekt ist bei Shells für weniger Geübte halt nicht sofort erkennbar
> (das unterscheidet sie von Bayern und Sachsen).

Als ob ein ungeuebter einen Bayern von einem Sachsen auseinanderhalten
koennte...

Vor wenigen Jahren in der S-Bahn Richtung Flughafen FJS, zwei Amis
unterhalten sich ueber ihre Eindruecke von .de, da kommt die Durchsage
"naechster Halt Leuchtenbergring" in triefendem Saechsisch - und der
eine Ami meint zu seiner Begleitung "... this bavarian slang is
really hard to understand..." (er Sprach ansonsten brauchbar Deutsch).

immer noch Grinsend,
Juergen
--

Lothar Paltins

unread,
Nov 22, 2004, 2:47:02 PM11/22/04
to
Juergen P. Meier wrote:

> In der Bash? Bestimmt nicht. Die grosse Mehrzahl der Linux-Nutzer

> verwendet die Bash. ...

aber ein kleines Dorf leistet noch Widerstand ;-). Als alter HP-UX User
habe ich mir auch unter Linux gleich die ksh installiert. Warum einen
Nachbau nehmen, wenn man das Original haben kann? :)

> $ /bin/bash adrtest.ksh blaf...@jors.net

Das würde ich mit einem Skript, das so eindeutig nach einer ksh ruft, gar
nicht erst probieren. Schon alleine bei den print-Statements würde die bash
auf die Schnauze fallen. Aber [[ ]] wird nicht verwendet, sondern test. Wie
inkonsequent!

> PS: kann das sein, das dein Humordetektor defekt ist?

Da scheine ich doch tatsächlich was übersehen zu haben. Muss wohl die
Threshold des Detektors etwas herabsetzen. Du machst's den Leuten aber auch
schwer, war ja gar kein Smiley in deinen Postings :-(.

--
Lothar Paltins lpne...@freenet.de

Lothar Paltins

unread,
Nov 22, 2004, 3:00:25 PM11/22/04
to
Heike C. Zimmerer wrote:

> Ja, mehr hatte ich mit meinem Einwurf auch nicht beabsichtigt. Der
> Dialekt ist bei Shells für weniger Geübte halt nicht sofort erkennbar
> (das unterscheidet sie von Bayern und Sachsen).

Und Schwaben! Die darfsch ned vergesse!

Auch ich habe übrigens oft Probleme mit den Shell Dialekten. Ich denke oft,
ein spezielles Feature wäre POSIX konform, weil es in der HP-UX Posix-Shell
Manpage dokumentiert ist. Aber das ist eben nur eine leicht modifizierte
ksh und die Manpage unterscheidet die Features dummerweise nicht.

--
Lothar Paltins lpne...@freenet.de

Nino Dehne

unread,
Nov 23, 2004, 7:07:40 PM11/23/04
to
Lothar Paltins wrote:
>>>[ -z $1 ] && echo "...
>>
>> [ -z "$1" ] && echo "...
>
>
> [[ -z $1 ]] && echo "...

[ $# -eq 0 ] && ...
[ $# -lt 1 ] && ...
...

bei nicht mehr und nicht weniger als einem Paramter ist

[ $# -eq 1 ] || ...

IMHO am besten.

ND

0 new messages