758 Stimmen

Wie schreibt man ein Bash-Skript, das optionale Eingabeargumente akzeptiert?

Ich möchte, dass mein Skript eine optionale Eingabe annehmen kann,

z.B. lautet mein Skript derzeit

#!/bin/bash
somecommand foo

aber ich möchte, dass es heißt:

#!/bin/bash
somecommand  [ if $1 exists, $1, else, foo ]

1078voto

Itay Perl Punkte 12174

Sie können die Syntax für Standardwerte verwenden:

somecommand ${1:-foo}

Der oben beschriebene Wille, wie er in Bash Referenzhandbuch - 3.5.3 Erweiterung der Shell-Parameter [Hervorhebung von mir]:

Wenn der Parameter nicht gesetzt ist oder Null wird die Erweiterung des Wortes ersetzt. Andernfalls wird der Wert des Parameters ersetzt.

Wenn Sie nur einen Standardwert ersetzen wollen, wenn der Parameter nicht gesetzt ist (aber nicht, wenn er null ist, z.B. nicht, wenn er eine leere Zeichenfolge ist), verwenden Sie stattdessen diese Syntax:

somecommand ${1-foo}

Wieder von Bash Referenzhandbuch - 3.5.3 Erweiterung der Shell-Parameter :

Wenn Sie den Doppelpunkt weglassen, wird nur auf einen nicht gesetzten Parameter geprüft. Anders ausgedrückt: Wenn der Doppelpunkt enthalten ist, prüft der Operator sowohl auf die Existenz des Parameters als auch darauf, dass sein Wert nicht null ist; wenn der Doppelpunkt weggelassen wird, prüft der Operator nur auf die Existenz.

546voto

Brad Parks Punkte 59613

Sie können einen Standardwert für eine Variable wie folgt festlegen:

somecommand.sh

#!/usr/bin/env bash

ARG1=${1:-foo}
ARG2=${2:-'bar is'}
ARG3=${3:-1}
ARG4=${4:-$(date)}

echo "$ARG1"
echo "$ARG2"
echo "$ARG3"
echo "$ARG4"

Hier sind einige Beispiele dafür, wie dies funktioniert:

$ ./somecommand.sh
foo
bar is
1
Thu 19 May 2022 06:58:52 ADT

$ ./somecommand.sh ez
ez
bar is
1
Thu 19 May 2022 06:58:52 ADT

$ ./somecommand.sh able was i
able
was
i
Thu 19 May 2022 06:58:52 ADT

$ ./somecommand.sh "able was i"
able was i
bar is
1
Thu 19 May 2022 06:58:52 ADT

$ ./somecommand.sh "able was i" super
able was i
super
1
Thu 19 May 2022 06:58:52 ADT

$ ./somecommand.sh "" "super duper"
foo
super duper
1
Thu 19 May 2022 06:58:52 ADT

$ ./somecommand.sh "" "super duper" hi you
foo
super duper
hi
you

67voto

Irit Katriel Punkte 3329
if [ ! -z $1 ] 
then 
    : # $1 was given
else
    : # $1 was not given
fi

35voto

Dennis Punkte 31622

Sie können die Anzahl der Argumente mit $#

#!/bin/bash
if [ $# -ge 1 ]
then
    $1
else
    foo
fi

13voto

hagen Punkte 121

Vergessen Sie bitte nicht, dass die Variable $1 .. $n in eine reguläre Variable schreiben müssen, um die Ersetzung zu verwenden

#!/bin/bash
NOW=$1
echo  ${NOW:-$(date +"%Y-%m-%d")}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X