このような使い方をするシェルスクリプトを作ろうとしています。
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
しかし、-from
と-to
の値をどうやって取得したらいいのかわかりません。何か方法があれば教えてください。
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
のように、-from
と-to
を省略した方が簡単かもしれません。
ocrscript.sh /home/kristoffer/test.png /home/kristoffer/test.txt
すると、次のようになります。
$1 # /home/kristoffer/test.png
$2 # /home/kristoffer/test.txt
欠点は、正しい順序で供給しなければならないことです。コマンドラインの名前付き引数の解析を簡単にするライブラリもありますが、通常、単純なシェルスクリプトでは、問題がなければ簡単な方法を使うべきです。
では、次のようにします。
/usr/local/bin/abbyyocr9 -rl Swedish -if "$1" -of "$2" 2>&1
1」と「2」を二重引用符で囲むことは必ずしも必要ではありませんが、推奨します。なぜなら、二重引用符で囲まないと動作しない文字列があるからです。
bashでは、$1
はスクリプトに渡される最初の引数、$2
は2番目の引数、というようになります。
/usr/local/bin/abbyyocr9 -rl Swedish -if "$1" -of "$2" 2>&1
ですから、次のように使えます。
./your_script.sh some_source_file.png destination_file.txt
二重引用符について説明します。
は、3つのスクリプトを考えます。
# 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(2つの引数)を起動し、
foo2.sh "a b"とすると、
bar.sh "a b"`(1つの引数)を起動します。このように、bashではパラメータの受け渡しや展開の方法を常に念頭に置いておくと、頭の痛い問題を解決することができます。