GNU/Linux >> Linux の 問題 >  >> Linux

Bash のスクリプト パラメータ

オプション名として「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 つのステップでプログラマーである私の同僚の約半分は、ランチャーファイルを使用したり、「使用法」に従っていたり、何か間違ったことをしたり、作成しているたびに表示されるヘルプを読んだりするには、あまりにも上手であることがわかりました。全体が混乱し、間違った順序で引数を指定してスクリプトを実行し、スクリプトが正しく機能しないと不平を言っています。私は退屈なので、すべてのスクリプトをオーバーホールして、同僚に安全であることを確認することにしました。上記のコード セグメントは最初のものでした。


Linux
  1. パラメータをBashスクリプトに渡す方法は?

  2. #!/usr/bin/env bash と #!/usr/bin/bash の違いは何ですか?

  3. jenkins パイプラインで bash コマンドを実行する

  1. /dev/shm/ と /tmp/ はいつ使用する必要がありますか?

  2. なぜ /home 以外のものを別のパーティションに入れるのですか?

  3. Chrooted SFTP ユーザーの書き込み権限

  1. Bashスクリプトに引数とオプションを追加する

  2. Linuxは複数の連続したパスセパレーター(/ home //// username /// file)をどのように処理しますか?

  3. 推奨される使用方法に従って、Web サイトは /var/ または /usr/ に配置する必要がありますか?