Gibt es einige integrierte Werkzeuge , die erkennen -x
und --xxxx
als Schalter, und nicht die Argumente, oder müssen Sie alle Eingangsgrößen Test für Striche durchlaufen, und dann die Argumente danach analysieren?
shell
shell-script
options
getopts
user394
quelle
quelle
getopt
es immer als GNU getopt verifiziert werden sollte, bevor Sie es verwenden, aber Sie sollten es sowieso nicht verwenden, dagetopts
es portabler (und im Allgemeinen netter) ist. Wenn Sie tun müssen es aus irgendeinem Grund nennen, nennen Sie es in einer GNU-spezifische Art und Weise, und dafür sorgen , dassGETOPT_COMPATIBLE
nicht in die Umwelt.while getopts "ab:" opt
?:
Nach einem Optionsbuchstaben ist ein Argument erforderlich. Ein:
als erstes Zeichen bedeutet, Fehlermeldungen zu unterdrücken.Ich nehme an, Sie verwenden Bash oder ähnliches. Ein Beispiel:
quelle
+=
mit einem Array. Ich wusste nicht, dass du das machen kannst. Nett!Sie müssen einen Zyklus schreiben, um die Parameter zu analysieren. In der Tat können Sie
getopts
Befehl verwenden, um es einfach zu tun.Dies ist ein einfaches Beispiel aus der
getopts
Manualpage:quelle
Ich habe kürzlich ein Skript für die Arbeit geschrieben, das vielseitig ist und mehrere Arten von Schaltern in beliebiger Reihenfolge zulässt. Ich kann das vollständige Skript aus offensichtlichen rechtlichen Gründen nicht offenlegen (ganz zu schweigen davon, dass ich es im Moment nicht bei mir habe), aber hier ist das Fleisch davon. Sie können es in eine Unterroutine einfügen und am Ende aufrufen Ihres Skripts:
Ich empfehle, Ihr Bash-Skript auf weniger als 400 Zeilen / 15.000 Zeichen zu beschränken. Mein oben genanntes Drehbuch wuchs über diese Größe hinaus und es wurde sehr schwierig, daran zu arbeiten. Ich habe angefangen, es in Perl umzuschreiben, das für die Aufgabe viel besser geeignet ist. Denken Sie daran, wenn Sie in bash an Ihren Skripten arbeiten. Bash ist großartig für kleine Skripte und Oneliners, aber alles, was komplexer ist, und Sie sollten es besser in Perl schreiben.
Beachten Sie, dass ich die obigen Tests nicht durchgeführt habe, sodass sie wahrscheinlich nicht funktionieren, aber Sie erhalten eine allgemeine Vorstellung davon.
quelle
options
am Ende anrufen, ist nicht korrekt, es wird zurückkehren-bash: syntax error near unexpected token $@
. Nennen Sie es alsoptions "$@"
.while
Bedingung sollte nicht(($#))
stattdessen sein?$#
? Bearbeiten: du hast recht.while (( "$#" ))