オプション名として「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
の方法に関する簡単なチュートリアルでした。
bashscript に指定した引数は、変数 $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
常に必要というわけではありませんが、二重引用符で囲まないと一部の文字列が機能しないため、お勧めします。
変数 "$1"
を使用します 、 "$2"
、 "$3"
などで引数にアクセスします。それらすべてにアクセスするには、 "[email protected]"
を使用できます 、または引数の数を取得する $#
(引数が少なすぎるか多すぎるかをチェックするのに役立つかもしれません)。
スクリプトがさまざまなマシン、シェル、さらには 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 つのステップでプログラマーである私の同僚の約半分は、ランチャーファイルを使用したり、「使用法」に従っていたり、何か間違ったことをしたり、作成しているたびに表示されるヘルプを読んだりするには、あまりにも上手であることがわかりました。全体が混乱し、間違った順序で引数を指定してスクリプトを実行し、スクリプトが正しく機能しないと不平を言っています。私は退屈なので、すべてのスクリプトをオーバーホールして、同僚に安全であることを確認することにしました。上記のコード セグメントは最初のものでした。