125

次のように使用する必要があるシェルスクリプトを作成しようとしています:

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値を取得する方法がわかりません。それを行う方法についてのアイデアはありますか?

4

5 に答える 5

78

オプション名として「from」と「to」を使用することに完全に執着していない場合は、getoptsを使用してこれを実装するのはかなり簡単です。

while getopts f:t: opts; do
   case ${opts} in
      f) FROM_VAL=${OPTARG} ;;
      t) TO_VAL=${OPTARG} ;;
   esac
done

getoptsコマンドライン引数を処理し、それらを便利に解析するプログラムです。

f:t:値を含む 2 つのパラメーターが必要であることを指定します (コロンで示されます)。のようなものは、フラグとしてのみ解釈されるとf:t:v言います。-v

opts現在のパラメータが保存される場所です。ステートメントは、これcaseを処理する場所です。

${OPTARG}パラメータに続く値が含まれます。${FROM_VAL}たとえば/home/kristoffer/test.png、スクリプトを次のように実行すると、値が取得されます。

ocrscript.sh -f /home/kristoffer/test.png -t /home/kristoffer/test.txt

他の人が示唆しているように、bash スクリプトを初めて作成する場合は、いくつかの基本事項を実際に読む必要があります。これは、どのように機能するかについての簡単なチュートリアルでしたgetopts

于 2013-08-01T20:17:37.720 に答える
41

引数にアクセスするには、変数"$1""$2"などを使用します。"$3"それらすべてにアクセスするには、 を使用する"$@"か、引数の数を取得します$#(引数が少なすぎるか多すぎるかをチェックするのに役立つ場合があります)。

于 2013-08-01T20:13:07.597 に答える
28

スクリプトがさまざまなマシン、シェル、さらには cygwin バージョン間で完全に移植可能であることを確認する必要がありました。さらに、スクリプトを書かなければならなかった同僚はプログラマーなので、最終的にこれを使用することになりました。

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;

理論的根拠:launcher.sh操作全体には相互に準独立したいくつかのステップがあったため、スクリプトも含めました (「準」と言っているのは、各スクリプトを単独で実行することもできますが、通常はすべて一緒に実行されるためです)。 )、そして 2 日間で、プログラマーである私の同僚の約半数が、ランチャー ファイルを使用したり、「使用方法」を実行したり、何かを行うたびに表示される HELP を読んだりするにはあまりにも優秀であることがわかりました。彼らは間違った順序で引数を使用してスクリプトを実行し、スクリプトが正しく機能しないと不平を言って、全体を混乱させていました。私は退屈なので、すべてのスクリプトをオーバーホールして、同僚に安全であることを確認することにしました。上記のコード セグメントは最初のものでした。

于 2014-07-06T14:55:40.877 に答える