Ich versuche, ein Shell-Skript zu erstellen, das wie folgt verwendet werden soll:
ocrscript.sh -from /home/kristoffer/test.png -to /home/kristoffer/test.txt
Das Skript wird dann die Bilddatei in eine Textdatei umwandeln. Hier ist, was ich bis jetzt entwickelt habe:
#!/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 "von"- und "bis"-Werte bekomme. Irgendwelche Ideen, wie ich das machen kann?
Die Argumente, die Sie einem Bash-Skript übergeben, erscheinen in den Variablen $1
und $2
und $3
, wobei sich die Zahl auf das Argument bezieht. $0
ist der Befehl selbst.
Die Argumente werden durch Leerzeichen getrennt, wenn Sie also das -von
und -bis
im Kommando angeben, landen sie auch in diesen Variablen, also in diesem Fall:
./ocrscript.sh -from /home/kristoffer/test.png -to /home/kristoffer/test.txt
Sie werden erhalten:
$0 # ocrscript.sh
$1 # -from
$2 # /home/kristoffer/test.png
$3 # -to
$4 # /home/kristoffer/test.txt
Es könnte einfacher sein, das "von" und das "bis" wegzulassen, etwa so:
ocrscript.sh /home/kristoffer/test.png /home/kristoffer/test.txt
Dann hast du..:
$1 # /home/kristoffer/test.png
$2 # /home/kristoffer/test.txt
Der Nachteil ist, dass Sie sie in der richtigen Reihenfolge eingeben müssen. Es gibt Bibliotheken, die das Parsen von benannten Argumenten auf der Kommandozeile erleichtern können, aber für einfache Shell-Skripte sollten Sie den einfachen Weg wählen, wenn es kein Problem darstellt.
Dann können Sie das tun:
/usr/local/bin/abbyyocr9 -rl Swedish -if "$1" -of "$2" 2>&1
Die doppelten Anführungszeichen um $1
und $2
sind nicht immer notwendig, aber ratsam, da einige Zeichenketten nicht funktionieren, wenn Sie sie nicht in doppelte Anführungszeichen setzen.
Verwenden Sie die Variablen "$1"
, "$2"
, "$3"
und so weiter, um auf Argumente zuzugreifen. Um auf alle Argumente zuzugreifen, können Sie "$@"
verwenden, oder um die Anzahl der Argumente zu erhalten $#
(könnte nützlich sein, um zu prüfen, ob zu wenige oder zu viele Argumente vorhanden sind).
In der Bash ist $1
das erste Argument, das an das Skript übergeben wird, $2
das zweite und so weiter
/usr/local/bin/abbyyocr9 -rl Swedish -if "$1" -of "$2" 2>&1
Sie können also verwenden:
./your_script.sh some_source_file.png destination_file.txt
Erläuterung zu den doppelten Anführungszeichen;
Betrachten Sie drei Skripte:
# foo.sh
bash bar.sh $1
# cat foo2.sh
bash bar.sh "$1"
# bar.sh
echo "1-$1" "2-$2"
Rufen Sie nun auf:
$ bash foo.sh "a b"
1-a 2-b
$ bash foo2.sh "a b"
1-a b 2-
Wenn Sie foo.sh "a b"
aufrufen, dann ruft es bar.sh a b
auf (zwei Argumente), und mit foo2.sh "a b"
ruft es bar.sh "a b"
auf (1 Argument). Behalten Sie immer im Hinterkopf, wie Parameter in der Bash übergeben und erweitert werden, das erspart Ihnen eine Menge Kopfschmerzen.