bashellコマンド行オプションと修理着信パラメータ処理
3022 ワード
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は複雑で、機能ももっと強いです。