Wenn Sie nicht unbedingt "von" und "nach" als Optionsnamen verwenden möchten, ist es ziemlich einfach, dies mit getopts zu implementieren:
while getopts f:t: opts; do
case ${opts} in
f) FROM_VAL=${OPTARG} ;;
t) TO_VAL=${OPTARG} ;;
esac
done
getopts
ist ein Programm, das Kommandozeilenargumente verarbeitet und bequem für Sie parst.
f:t:
gibt an, dass Sie 2 Parameter erwarten, die Werte enthalten (gekennzeichnet durch den Doppelpunkt). Etwas wie f:t:v
sagt, dass -v
wird nur als Flag interpretiert.
opts
Hier wird der aktuelle Parameter gespeichert. Die case
In der Anweisung werden Sie dies verarbeiten.
${OPTARG}
enthält den Wert hinter dem Parameter. ${FROM_VAL}
erhält zum Beispiel 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 sich, wenn Sie zum ersten Mal Bash-Skripte schreiben, wirklich über einige Grundlagen informieren. Dies war nur ein kurzes Tutorial, wie getopts
funktioniert.
Die Argumente, die Sie einem Bashskript zur Verfügung stellen, 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 -from
angeben würden und -to
im Befehl landen sie auch in diesen Variablen, also dafür:
./ocrscript.sh -from /home/kristoffer/test.png -to /home/kristoffer/test.txt
Sie erhalten:
$0 # ocrscript.sh
$1 # -from
$2 # /home/kristoffer/test.png
$3 # -to
$4 # /home/kristoffer/test.txt
Es könnte einfacher sein, -from
wegzulassen und die -to
, wie:
ocrscript.sh /home/kristoffer/test.png /home/kristoffer/test.txt
Dann haben Sie:
$1 # /home/kristoffer/test.png
$2 # /home/kristoffer/test.txt
Der Nachteil ist, dass Sie es in der richtigen Reihenfolge liefern müssen. Es gibt Bibliotheken, die es einfacher machen können, benannte Argumente auf der Befehlszeile zu parsen, aber normalerweise sollten Sie für einfache Shell-Skripte einfach den einfachen Weg verwenden, wenn es kein Problem ist.
Dann können Sie Folgendes tun:
/usr/local/bin/abbyyocr9 -rl Swedish -if "$1" -of "$2" 2>&1
Die doppelten Anführungszeichen um die $1
und die $2
sind nicht immer notwendig, werden aber empfohlen, da einige Zeichenfolgen 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 zuzugreifen, können Sie "[email protected]"
verwenden , oder um die Anzahl der Argumente $#
zu erhalten (kann nützlich sein, um nach zu wenigen oder zu vielen Argumenten zu suchen).
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, also habe ich am Ende Folgendes verwendet:
for ((i=1;i<=$#;i++));
do
if [ ${!i} = "-s" ]
then ((i++))
var1=${!i};
elif [ ${!i} = "-log" ];
then ((i++))
logFile=${!i};
elif [ ${!i} = "-x" ];
then ((i++))
var2=${!i};
elif [ ${!i} = "-p" ];
then ((i++))
var3=${!i};
elif [ ${!i} = "-b" ];
then ((i++))
var4=${!i};
elif [ ${!i} = "-l" ];
then ((i++))
var5=${!i};
elif [ ${!i} = "-a" ];
then ((i++))
var6=${!i};
fi
done;
Begründung:Ich habe einen launcher.sh
eingefügt Skript, da die ganze Operation mehrere Schritte hatte, die quasi unabhängig voneinander waren (ich sage "quasi", denn obwohl jedes Skript einzeln ausgeführt werden konnte, wurden sie normalerweise alle zusammen ausgeführt), und in zwei Tagen fand ich heraus, dass etwa die Hälfte meiner Kollegen, Programmierer und alle, 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 falsch machten und machten ein Durcheinander der ganzen Sache, Skripte mit Argumenten in der falschen Reihenfolge auszuführen und sich darüber zu beschweren, dass die Skripte nicht richtig funktionierten. Da ich so cholerisch bin, habe ich beschlossen, alle meine Drehbücher zu überarbeiten, um sicherzustellen, dass sie kollegensicher sind. Das obige Codesegment war das Erste.