回答:
シェルコマンドとそのコマンドの引数は次のように表示された番号のシェル変数を:$0
、のようなものをコマンド自体の文字列値を持つscript
、./script
、/home/user/bin/script
または何でも。任意の引数は次のように表示され"$1"
、"$2"
、"$3"
ようにと。引数の数はシェル変数にあります"$#"
。
これに対処する一般的な方法には、シェルコマンドgetopts
とshift
。getopts
C getopt()
ライブラリ関数によく似ています。to 、to などのshift
値を移動します。減少します。コードはの値を調べて、アクションを決定するために… を使用して物事を実行し、次にa を実行して次の引数に移動します。それだけで、これまで検討しているかもしれない、と。$2
$1
$3
$2
$#
"$1"
case
esac
shift
$1
$1
$#
$/shellscriptname.sh argument1 argument2 argument3
また、あるシェルスクリプトの出力を引数として別のシェルスクリプトに渡すこともできます。
$/shellscriptname.sh "$(secondshellscriptname.sh)"
シェルスクリプト内では$1
、1 $2
番目の引数や2番目の引数などのような番号を持つ引数にアクセスできます。
フォーム
$ ./script.sh "$@"
はに最も便利ですargv
。arg区切り文字は空白ですが、変更できます。どれほど手違いかを覚えてはいけません。次に使用する
$1, $2, shift, if [ $# -ne 3 ]
フローを制御します。case ... esac
意志が十分であれば、通常getoptsを受け入れません。
bashスクリプトでは、個人的に次のスクリプトを使用してパラメーターを設定するのが好きです。
#!/bin/bash
helpFunction()
{
echo ""
echo "Usage: $0 -a parameterA -b parameterB -c parameterC"
echo -e "\t-a Description of what is parameterA"
echo -e "\t-b Description of what is parameterB"
echo -e "\t-c Description of what is parameterC"
exit 1 # Exit script after printing help
}
while getopts "a:b:c:" opt
do
case "$opt" in
a ) parameterA="$OPTARG" ;;
b ) parameterB="$OPTARG" ;;
c ) parameterC="$OPTARG" ;;
? ) helpFunction ;; # Print helpFunction in case parameter is non-existent
esac
done
# Print helpFunction in case parameters are empty
if [ -z "$parameterA" ] || [ -z "$parameterB" ] || [ -z "$parameterC" ]
then
echo "Some or all of the parameters are empty";
helpFunction
fi
# Begin script in case all parameters are correct
echo "$parameterA"
echo "$parameterB"
echo "$parameterC"
この構造では、各パラメーターにキーレターを定義しているため、パラメーターの順序に依存しません。また、パラメーターが誤って定義されている場合は常に、ヘルプ機能が出力されます。処理するパラメーターが異なるスクリプトが多数ある場合に非常に便利です。次のように機能します。
$ ./myscript -a "String A" -b "String B" -c "String C"
String A
String B
String C
$ ./myscript -a "String A" -c "String C" -b "String B"
String A
String B
String C
$ ./myscript -a "String A" -c "String C" -f "Non-existent parameter"
./myscript: illegal option -- f
Usage: ./myscript -a parameterA -b parameterB -c parameterC
-a Description of what is parameterA
-b Description of what is parameterB
-c Description of what is parameterC
$ ./myscript -a "String A" -c "String C"
Some or all of the parameters are empty
Usage: ./myscript -a parameterA -b parameterB -c parameterC
-a Description of what is parameterA
-b Description of what is parameterB
-c Description of what is parameterC
Python argparseに精通しており、Pythonを呼び出してbash引数を解析することを気にしない場合は、bash argparse(https://github.com/mattbryson/bash-arg-parse)を使用します。
ここで同じ答えを参照してください:https : //stackoverflow.com/questions/7069682/how-to-get-arguments-with-flags-in-bash-script/50181287#50181287
getopt()
は非常に確立された標準ですが、getopt
実行可能ファイルはディストリビューション/プラットフォーム間で同じではありません。getopts
POSIX標準なので、私は完全に変換されたユーザーです。それは素晴らしい作品とdash
私の好適スクリプトシェルである、また