bashellコマンド行オプションと修理着信パラメータ処理


shellプログラムを作成するには、コマンドラインパラメータを処理する必要があります。ここでは、bashでのコマンドラインの処理方法について説明します。オプションとパラメータ:コマンドライン: 

./test.sh -f config.conf -v --prefix=/home
-fはオプションであり、パラメータ、すなわちconfig.co nf、−vもオプションであるが、パラメータは必要ない。prefixと呼ばれています。つまりオプション自体が1つ以上の文字で、それも1つのパラメータが必要です。等号で接続する必要はありません。bashでは、コマンドラインのパラメータを以下の3つの方法で処理することができます。それぞれの方法で自分のアプリケーションシーンがあります。*ハンドブック方式*getopts*getoptでは、この3つの処理を順次検討しています。1,手動処理方式は、まずいくつかの変数を知るべきか、または上記の命令行動例:

*    $0 : ./test.sh, , c/c++ argv[0]
*    $1 : -f, .
*    $2 : config.conf
*    $3, $4 ... : 。
*    $#  , , $# 4.
*    $@ : , , -f config.conf -v --prefix=/home
*    $* : $@ , "$*" "$@"( ) ,"$*" , "$@" 。
例:

#!/bin/bash
for arg in "$*"
do
   echo $arg
done
for arg in "$@"
do
 echo $arg
done
によって実行される。/test.sh-f config.co nf-n 10によって印刷される。    #これは「*」の出力-fです。   #以下は@の出力config.co nf-n 10ですので、手動で処理する方法はこれらの変数に対する処理です。手動処理はコマンドラインで送信されたパラメータの位置に依存していますので、簡単なパラメータだけを処理します。脚本学堂wwww.jb 51.net編集整理)例:(test.sh 10はあまり使われていません。/test-n 10はオプション付きです。典型的な使い方としては、

#!/bin/bash
if [ x$1 != x ]
then
    #...
else
then
    #...
fi
はなぜx$1を使うのですか?xという方式で比較しますか?このような方式の比較を想像してみます。if[-n$1]  #$1は空ではありませんが、ユーザがパラメータを伝えない場合は$1が空です。この場合は[-n]になりますので、補助文字列を追加して比較する必要があります。手作業で多くの簡単なニーズを満たすことができ、shiftに合わせて使うことで、強力な機能を構築することができますが、複雑なオプションを扱う場合は、次の2つの方法がおすすめです。2.getopts/getopt処理コマンドラインパラメータは似ていて複雑なものです。そのために、cはgetopt/getopt_を提供します。longなどの関数は、c+++のbootsはoptionsライブラリを提供しています。shellでは、この処理はgetoptsとgetopt.getoptsとgetopt機能が似ていますが、getoptは独立した実行可能ファイルで、getoptsはbashによって内蔵されています。まず、パラメータ伝達の典型的な使い方を見てみましょう。
 
    * ./test.sh -a -b -c  : ,
    * ./test.sh -abc   : , , 。
    * ./test.sh -a args -b -c : , -a , -b -c 。
    * ./test.sh --a-long=args --b-long :
は、最初にgetoptsを見にきます。長いオプションはサポートされていません。getoptsを使うのはとても簡単です。

#test.sh
#!/bin/bash
while getopts "a:bc" arg #
do
        case $arg in
             a)
                echo "a's arg:$optarg" # $optarg

             b)
                echo "b"

             c)
                echo "c"

             ?)  # arg ?
            echo "unkonw argument"
        exit 1

        esac
done
は今使えます。/test.sh-a arg-b-cまたは./test.sh-a arg-bcをロードします。ほとんどのスクリプトはこの関数を使用すればいいと思います。オプションおよびオプションパラメータをサポートする必要があるなら、getopt.getoptが持っている例を使用する必要があります。  -b arg arg 1-cコマンドラインに複数のarg 1パラメータが表示され、getoptとsetを介してコマンドラインが、-a-b arg-c--arg 1ドルは-aを指します。3,一般的な小さい脚本をまとめて手作業で処理すれば十分です。getoptsはほとんどの状況を処理できます。getoptは複雑で、機能ももっと強いです。