Ich habe ein Bash-Skript, das Aktionen basierend auf dem Wert einer Variablen ausführt. Die allgemeine Syntax der case-Anweisung lautet:
case ${command} in
start) do_start ;;
stop) do_stop ;;
config) do_config ;;
*) do_help ;;
esac
Ich möchte eine Standardroutine ausführen, wenn kein Befehl angegeben ist und do_help
der Befehl nicht erkannt wird. Ich habe versucht, den Fallwert folgendermaßen wegzulassen:
case ${command} in
) do_default ;;
...
*) do_help ;;
esac
Das Ergebnis war vorhersehbar, nehme ich an:
syntax error near unexpected token `)'
Dann habe ich versucht, einen regulären Ausdruck zu verwenden:
case ${command} in
^$) do_default ;;
...
*) do_help ;;
esac
Damit ${command}
fällt ein Leerzeichen in den *
Koffer.
Versuche ich das Unmögliche zu tun?
Antworten:
Die
case
Anweisung verwendet Globs, keine regulären Ausdrücke, und besteht auf genauen Übereinstimmungen.So ist die leere Zeichenkette geschrieben wird , wie üblich, wie
""
oder''
:quelle
something|'') do_something ;;
Ich benutze einen einfachen Durchfall. Keine übergebenen Parameter ($ 1 = "") werden von der zweiten case-Anweisung abgefangen, das folgende * erfasst jedoch unbekannte Parameter. Das Umdrehen von "") und *) funktioniert nicht, da *) in diesem Fall jedes Mal alles abfängt, sogar Leerzeichen.
quelle
So mache ich das (für jeden sein eigenes):
Wenn ich nach einer Unterroutine suche, die in einer oder zwei Dateien in einem Dateisystem mit Dutzenden von CGI-Dateien vorhanden ist, gebe ich den Suchbegriff ein, z. B. 'ssn_format'. Bash gibt mir die Ergebnisse in einer Textdatei (finder.txt) zurück, die so aussieht:
- ./registry/master_person_index.cgi: SQLClinic :: Security :: ssn_format ($ user, $ script_name, $ local, $ Local, $ ssn) if $ ssn ne "";
quelle