我想做一个shell脚本,应该这样使用:
ocrscript.sh -from /home/kristoffer/test.png -to /home/kristoffer/test.txt
该脚本将把图像文件转化为文本文件,然后OCR。以下是我目前想出的办法:
#!/bin/bash
export HOME=/home/kristoffer
/usr/local/bin/abbyyocr9 -rl Swedish -if ???fromvalue??? -of ???tovalue??? 2>&1
但我不知道如何获得 "从 "和 "到 "的值。有什么好办法吗?
你提供给bash脚本的参数将出现在变量$1
和$2
以及$3
中,其中的数字指的是参数。`$0'是命令本身。
参数之间用空格隔开,所以如果你在命令中提供 "from "和 "to",它们也会出现在这些变量中,所以对于这个:
./ocrscript.sh -from /home/kristoffer/test.png -to /home/kristoffer/test.txt
你会得到:
$0 # ocrscript.sh
$1 # -from
$2 # /home/kristoffer/test.png
$3 # -to
$4 # /home/kristoffer/test.txt
省略 "从 "和 "到 "可能会更容易,比如:
ocrscript.sh /home/kristoffer/test.png /home/kristoffer/test.txt
然后你就会有:
$1 # /home/kristoffer/test.png
$2 # /home/kristoffer/test.txt
缺点是你必须按照正确的顺序来提供它。有一些库可以使解析命令行上的命名参数变得更容易,但通常对于简单的shell脚本,如果没有问题,你应该使用简单的方法。
那么你可以这样做:
/usr/local/bin/abbyyocr9 -rl Swedish -if "$1" -of "$2" 2>&1
在"$1 "和"$2 "周围的双引号并不总是必要的,但建议使用,因为如果你不把它们放在双引号之间,有些字符串将无法工作。
在bash中$1
是传递给脚本的第一个参数,$2
是第二个参数,以此类推
/usr/local/bin/abbyyocr9 -rl Swedish -if "$1" -of "$2" 2>&1
所以你可以用
./your_script.sh some_source_file.png destination_file.txt
关于双引号的解释;
考虑三个脚本:
# foo.sh
bash bar.sh $1
# cat foo2.sh
bash bar.sh "$1"
# bar.sh
echo "1-$1" "2-$2"
现在调用:
$ bash foo.sh "a b"
1-a 2-b
$ bash foo2.sh "a b"
1-a b 2-
当你调用foo.sh "a b"
时,它会调用bar.sh a b
(两个参数),而用foo2.sh "a b"
时会调用bar.sh "a b"
(一个参数)。永远记住参数在bash中的传递和扩展方式,这将为你省去很多麻烦。