Ich versuche ein Shell-Skript zu erstellen, das wie folgt verwendet werden sollte:
ocrscript.sh -from /home/kristoffer/test.png -to /home/kristoffer/test.txt
Das Skript konvertiert dann die Bilddatei in eine Textdatei. Folgendes habe ich mir bisher ausgedacht:
#!/bin/bash
export HOME=/home/kristoffer
/usr/local/bin/abbyyocr9 -rl Swedish -if ???fromvalue??? -of ???tovalue??? 2>&1
Aber ich weiß nicht, wie ich die -from
und -to
Werte bekommen soll. Irgendwelche Ideen, wie es geht?
linux
bash
shell
parameters
Kristoffer
quelle
quelle
Antworten:
Die Argumente, die Sie für ein Bashscript angeben, werden in den Variablen angezeigt
$1
und$2
und$3
wo sich die Nummer auf das Argument bezieht.$0
ist der Befehl selbst.Die Argumente sind durch Leerzeichen getrennt. Wenn Sie also das
-from
und-to
im Befehl angeben, werden sie auch in diesen Variablen angezeigt.Du wirst kriegen:
Es könnte einfacher sein, das
-from
und das wegzulassen-to
, wie:Dann haben Sie:
Der Nachteil ist, dass Sie es in der richtigen Reihenfolge liefern müssen. Es gibt Bibliotheken, die es einfacher machen können, benannte Argumente in der Befehlszeile zu analysieren, aber normalerweise sollten Sie für einfache Shell-Skripte nur den einfachen Weg verwenden, wenn dies kein Problem darstellt.
Dann können Sie tun:
Die doppelten Anführungszeichen um
$1
und und$2
sind nicht immer erforderlich, werden jedoch empfohlen, da einige Zeichenfolgen nicht funktionieren, wenn Sie sie nicht zwischen doppelte Anführungszeichen setzen.quelle
Wenn Sie nicht vollständig an die Verwendung von "von" und "bis" als Optionsnamen gebunden sind, ist es ziemlich einfach, dies mit getopts zu implementieren :
getopts
ist ein Programm, das Befehlszeilenargumente verarbeitet und diese bequem für Sie analysiert.f:t:
Gibt an, dass Sie 2 Parameter erwarten, die Werte enthalten (angezeigt durch den Doppelpunkt). So etwas wief:t:v
sagt, dass dies-v
nur als Flagge interpretiert wird.opts
Hier wird der aktuelle Parameter gespeichert. In dercase
Anweisung werden Sie dies verarbeiten.${OPTARG}
enthält den Wert nach dem Parameter.${FROM_VAL}
Zum Beispiel erhalten Sie den Wert,/home/kristoffer/test.png
wenn Sie Ihr Skript wie folgt ausgeführt haben :ocrscript.sh -f /home/kristoffer/test.png -t /home/kristoffer/test.txt
Wie die anderen vorschlagen, sollten Sie, wenn Sie zum ersten Mal Bash-Skripte schreiben, einige Grundlagen wirklich nachlesen. Dies war nur eine kurze Anleitung zur Funktionsweise
getopts
.quelle
f:t:vs
wird-f some_f -t some_t -v -s
Verwenden Sie die Variablen
"$1"
,"$2"
,"$3"
und so weiter , um Zugang Argumente. Um auf alle zuzugreifen, können Sie verwenden"$@"
oder die Anzahl der Argumente ermitteln$#
(möglicherweise hilfreich, um nach zu wenigen oder zu vielen Argumenten zu suchen).quelle
Ich musste sicherstellen, dass meine Skripte vollständig zwischen verschiedenen Maschinen, Shells und sogar Cygwin-Versionen portierbar sind. Außerdem sind meine Kollegen, für die ich die Skripte schreiben musste, Programmierer, und so habe ich Folgendes verwendet:
Begründung: Ich habe auch ein
launcher.sh
Skript eingefügt, da die gesamte Operation mehrere Schritte hatte, die quasi unabhängig voneinander waren (ich sage "quasi", denn obwohl jedes Skript für sich ausgeführt werden konnte, wurden sie normalerweise alle zusammen ausgeführt ), und in zwei Tagen stellte ich fest, dass ungefähr die Hälfte meiner Kollegen, die Programmierer und alle waren, zu gut waren, um die Launcher-Datei zu verwenden, der "Verwendung" zu folgen oder die HILFE zu lesen, die jedes Mal angezeigt wurde, wenn sie etwas taten falsch und sie haben das Ganze durcheinander gebracht, Skripte mit Argumenten in der falschen Reihenfolge ausgeführt und sich darüber beschwert, dass die Skripte nicht richtig funktionierten. Da ich der Choleriker bin, habe ich beschlossen, alle meine Skripte zu überarbeiten, um sicherzustellen, dass sie kollegensicher sind. Das obige Codesegment war das erste, was.quelle
In bash
$1
wird das erste Argument an das Skript übergeben, das$2
zweite und so weiterSo können Sie verwenden:
Erklärung zu doppelten Anführungszeichen;
Betrachten Sie drei Skripte:
Rufen Sie nun auf:
Wenn Sie aufrufen,
foo.sh "a b"
wird es aufgerufenbar.sh a b
(zwei Argumente) undfoo2.sh "a b"
damit aufgerufenbar.sh "a b"
(1 Argument). Denken Sie immer daran, wie Parameter in Bash übergeben und erweitert werden. Dies erspart Ihnen viel Kopfschmerzen.quelle