Estoy tratando de hacer un script de shell que debe ser utilizado como este:
ocrscript.sh -from /home/kristoffer/test.png -to /home/kristoffer/test.txt
El script entonces ocr convertir el archivo de imagen a un archivo de texto. Esto es lo que he hecho hasta ahora:
#!/bin/bash
export HOME=/home/kristoffer
/usr/local/bin/abbyyocr9 -rl Swedish -if ???fromvalue??? -of ???tovalue??? 2>&1
Pero no sé cómo obtener los valores "desde" y "hasta". ¿Alguna idea de cómo hacerlo?
Los argumentos que proporcione a un bashscript aparecerán en las variables $1
y $2
y $3
donde el número se refiere al argumento. $0
es el propio comando.
Los argumentos están separados por espacios, así que si proporcionas el desde
y hasta
en el comando, terminarán en estas variables también, así que para esto:
./ocrscript.sh -from /home/kristoffer/test.png -to /home/kristoffer/test.txt
Usted'obtendrá:
$0 # ocrscript.sh
$1 # -from
$2 # /home/kristoffer/test.png
$3 # -to
$4 # /home/kristoffer/test.txt
Podría ser más fácil omitir el "desde" y el "hasta", como:
ocrscript.sh /home/kristoffer/test.png /home/kristoffer/test.txt
Entonces tendrás:
$1 # /home/kristoffer/test.png
$2 # /home/kristoffer/test.txt
El inconveniente es que tendrás que suministrarlo en el orden correcto. Hay bibliotecas que pueden facilitar el análisis de los argumentos con nombre en la línea de comandos, pero normalmente para los scripts de shell sencillos deberías usar la forma fácil, si no hay problema.
Entonces puedes hacerlo:
/usr/local/bin/abbyyocr9 -rl Swedish -if "$1" -of "$2" 2>&1
Las comillas dobles alrededor de $1
y $2
no son siempre necesarias pero son aconsejables, porque algunas cadenas no funcionarán si no las pones entre comillas dobles.
Utilice las variables "$1"
, "$2"
, "$3"
y así sucesivamente para acceder a los argumentos. Para acceder a todos ellos puede utilizar "$@"
, o para obtener el recuento de argumentos $#
(puede ser útil para comprobar si hay pocos o demasiados argumentos).
En bash $1
es el primer argumento que se pasa al script, $2
el segundo y así sucesivamente
/usr/local/bin/abbyyocr9 -rl Swedish -if "$1" -of "$2" 2>&1
Así que usted puede utilizar:
./your_script.sh some_source_file.png destination_file.txt
Explicación sobre las comillas dobles;
considere tres guiones:
# foo.sh
bash bar.sh $1
# cat foo2.sh
bash bar.sh "$1"
# bar.sh
echo "1-$1" "2-$2"
Ahora invoca:
$ bash foo.sh "a b"
1-a 2-b
$ bash foo2.sh "a b"
1-a b 2-
Cuando invocas foo.sh "a b"entonces invoca
bar.sh a b(dos argumentos), y con
foo2.sh "a b"invoca
bar.sh "a b"` (1 argumento). Ten siempre presente cómo se pasan y expanden los parámetros en bash, te ahorrará muchos dolores de cabeza.