Ich lerne Bash.
Ich möchte ein einfaches Skript erstellen, das, wenn keine Argumente angegeben werden, eine Meldung anzeigt. Und wenn ich Zahlen als Argument gebe, s abhängig vom Wert, macht es die eine oder andere Sache.
Ich würde auch gerne Vorschläge für die besten Online-Handbücher für Anfänger in Bash wissen
Vielen Dank
> /dev/null
und / oder2> /dev/null
danach, um die Standardausgabe und / oder Standardfehlerströme in Vergessenheit zu geraten.exit 1
) zurück. Es gibt weitere Konventionen zu Rückgabe- / Ausstiegscodes, die Sie schnell online finden können. Wichtig ist jedoch, dass sie nicht 0 sein sollten, was auf Erfolg hinweist.Wenn Sie nur dann an einer Kaution interessiert sind, wenn ein bestimmtes Argument fehlt, ist die Parametersubstitution großartig:
quelle
Beispiel
Ergebnis
Einzelheiten
-z ist der unäre Operator für die Länge der Zeichenfolge ist Null.
$*
ist alles Argumente. Die Anführungszeichen dienen der Sicherheit und enthalten mehrere Argumente, falls vorhanden.Verwenden Sie
man bash
und suchen Sie ( / key) nach "unary" für weitere Operatoren wie diesen.quelle
-z
als mizzingAlt, aber ich habe Grund, die Antwort jetzt zu überarbeiten, dank einiger vorheriger Verwirrung:
Dies gibt "Something" aus, wenn kein Positionsargument $ 1 vorhanden ist. Es wird jedoch nicht überprüft, ob $ 1 bestimmte Informationen enthält.
quelle
$#
ist explizit die Ganzzahl der Anzahl der Argumente; Es wird entweder "0" sein und Sie werden "etwas" wiedergeben, obwohl es keine Argumente gibt, oder es wird eine positive Zahl sein, und Sie werden "etwas" korrekt wiedergeben. Die Prüfung selbst wird jedoch niemals etwas bewirken, unabhängig von der Eingabe oder dem Mangel an Eingabe, die Sie verwenden. Es wird immer gemeldet, dass$#
ein Wert enthalten ist. Das ist also völlig falsch und wird niemals wie behauptet funktionieren.echo $#
als Inhalt eines Skripts /tmp/test.sh, und führen Sie es dann unter / bin / bash sowie / bin / sh (oder / bin / dash und allen anderen verfügbaren Shell-Implementierungen aus./tmp/test.sh
Gibt "0" aus Die Konsole wird/bin/dash /tmp/test.sh
auf der anderen Seite/tmp/test.sh foo
"1" und/tmp/test.sh first second
"2" wiedergeben.man bash
dem Abschnitt "Spezielle Parameter" behandelt "Die Shell behandelt mehrere Parameter speziell. Diese Parameter dürfen nur referenziert werden; eine Zuordnung zu ihnen ist nicht zulässig." Und "# Erweitert sich auf die Anzahl der Positionsparameter in Dezimalzahl." Es wird ebenfalls von POSIX beauftragt, wie in pubs.opengroup.org/onlinepubs/9699919799/utilities/…