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
> 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
> 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
> 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 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
>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]
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
> Du (r_jacob) meintest am 18.11.04:
>
>> [ -z $1 ] && echo "...
>
> [ -z "$1" ] && echo "...
[[ -z $1 ]] && echo "...
--
Lothar Paltins lpne...@freenet.de
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
> 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
> [[ -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/
> 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
>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
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
> 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.
> [[ 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.
Dich sollte man mit GNUismen bewerfen, bis du diese Haltung _hier_
aufgibst ;)
Juergen
--
Juergen P. Meier - "This World is about to be Destroyed!"
> 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?
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!!?"
> 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.
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?
> 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
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
--
> 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
> 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
[ $# -eq 0 ] && ...
[ $# -lt 1 ] && ...
...
bei nicht mehr und nicht weniger als einem Paramter ist
[ $# -eq 1 ] || ...
IMHO am besten.
ND