Ich möchte, dass mein Skript eine optionale Eingabe annehmen kann.
zB derzeit ist mein Skript
#!/bin/bash
somecommand foo
aber ich möchte es sagen:
#!/bin/bash
somecommand [ if $1 exists, $1, else, foo ]
Ich möchte, dass mein Skript eine optionale Eingabe annehmen kann.
zB derzeit ist mein Skript
#!/bin/bash
somecommand foo
aber ich möchte es sagen:
#!/bin/bash
somecommand [ if $1 exists, $1, else, foo ]
Antworten:
Sie können die Standardwertsyntax verwenden:
Das Obige wird, wie im Bash-Referenzhandbuch - 3.5.3 Erweiterung der Shell-Parameter [Hervorhebung von mir] beschrieben:
Wenn Sie einen Standardwert nur ersetzen möchten, wenn der Parameter nicht festgelegt ist (aber nicht, wenn er null ist, z. B. nicht, wenn es sich um eine leere Zeichenfolge handelt), verwenden Sie stattdessen diese Syntax:
Wieder aus dem Bash-Referenzhandbuch - 3.5.3 Erweiterung der Shell-Parameter :
quelle
foo
if$1
is aset oder eine leere Zeichenfolge " und${1-foo}
"returnfoo
if$1
is aset".Sie können einen Standardwert für eine Variable wie folgt festlegen:
somecommand.sh
Hier einige Beispiele, wie dies funktioniert:
quelle
-
mich verwirrt (ist es negiert?).quelle
-n
ist das gleiche wie! -z
.-n
und! -z
daher würde ich sagen, dass dies hier nicht der Fall ist.[ -n $1 ]
ist dies immer der Fall . Wenn Sie bash verwenden,[[ -n $1 ]]
wird sich so verhalten, wie Sie es erwarten, andernfalls müssen Sie zitieren[ -n "$1" ]
Sie können die Anzahl der Argumente mit überprüfen
$#
quelle
Bitte vergessen Sie nicht, wenn die Variable $ 1 .. $ n ist, müssen Sie in eine reguläre Variable schreiben, um die Substitution zu verwenden
quelle
DAY=${1:-$(date +%F -d "yesterday")}
Für optionale Mehrfachargumente , analog zum
ls
Befehl, der eine oder mehrere Dateien aufnehmen kann, oder standardmäßig alles im aktuellen Verzeichnis auflistet:Funktioniert leider nicht richtig für Dateien mit Leerzeichen im Pfad. Habe noch nicht herausgefunden, wie das funktioniert.
quelle
Dies ermöglicht den Standardwert für das optionale 1. Argument und behält mehrere Argumente bei.
quelle
Es ist möglich, die Variablensubstitution zu verwenden,
date
um ein Argument durch einen festen Wert oder einen Befehl (wie ) zu ersetzen . Die Antworten haben sich bisher auf feste Werte konzentriert, aber dies ist, was ich verwendet habe, um Datum zu einem optionalen Argument zu machen:quelle