1. ホーム
  2. スクリプト・コラム
  3. リナックスシェル

シェルでスクリプトのパラメータを渡す2つの方法について説明します。

2022-02-08 14:30:19

方法1: $0,$1,$2...

0,1,2...を使用する。注目すべきは、$0がスクリプトのパスとスクリプト名を取得してから、順番に引数を取得していることです。 を使って引数を取得しますが、10個以上の引数を取得することは稀なことです。

1.1 例 test.shファイルの新規作成

#! /bin/bash
echo "script$0"
echo "first argument $1"
echo "second argument $2"


このスクリプトをシェルで実行すると、次のようになります。

$ . /test.sh 1 2

シェルが出力されます。
スクリプト. /test.sh
第1パラメータ 1
第2パラメータ 2

1.2 test.shファイルに書かれた、パラメータが10個以上ある場合の動作は以下のとおりです。

#! /bin/bash
echo "Script name $0"
echo "first argument $1"
echo "second argument $2"
echo "third argument$3"
echo "fourth parameter $4"
......
echo "The tenth parameter $10"
echo "tenth parameter ${10}"


このスクリプトをシェルで実行すると、次のようになります。

$ . /test.sh a b c d e f g h i j

シェルが出力されます。
スクリプト名 /test.sh
最初のパラメータ a
第2パラメータ b
第3パラメータ c
第4パラメータ d
第5パラメータ e
6番目のパラメータf
第7パラメータ g
第8パラメータ h
第九パラメータ i
第10パラメータ a0
第10パラメータ j

10}は第10引数を正しく読み、$10は$1に分割されて第1引数aを読み、文字列0を継ぎ足すので、出力はa0となることがわかります。

長所:パラメータを取得しやすい、スクリプトの実行に必要な入力が少ない

短所:パラメータは順番に入力する必要があり、途中でミスると不正解になること

方法2:getopts

構文形式です。

getopts [OPTION[:]] [DESCPRITION] VARIABLE



 option: スクリプトに使用できるオプションを示します。
":"。オプションの後にコロン(":")がある場合、そのオプションの後にパラメータ(つまり説明文DESCPRITION)を付けることができることを意味します。
VARIABLE:オプションが変数VARIABLEに格納されることを示す

2.1 例 また、新しい test.sh ファイルを作成します。

while getopts ":a:b:c:" opt
do
 case $opt in
  a)
  echo "The value of argument a $OPTARG"
  ;;
  b)
  echo "The value of parameter b $OPTARG"
  ;;
  c)
  echo "The value of parameter c $OPTARG"
  ;;
  ?)
  echo "Unknown parameter"
  exit 1;;
 esac
done


a:b:cはパラメータの変数名を定義するのと同じです。未知のパラメータがある場合もあるので、?

このスクリプトをシェルで実行すると、次のようになります。

$ . /test.sh -a 1 -b 2 -c 3

# シェルでの出力
パラメータaの値 1
パラメータ b2 の値
パラメータ c3 の値

<ブロッククオート

$ . /test.sh -a 1 -c 3

# シェルでの出力
パラメータaの値 1
パラメータ c の値 3

<ブロッククオート

$ . /test.sh -a 1 -c 3 -d 4

# シェルでの出力
パラメータaの値 1
パラメータ c の値 3
不明なパラメータ

長所 a+パラメータ値で一対一のマッチングを行うため、パラメータのマッチングエラーが発生せず、パラメータのデフォルト化が可能であり、また、後からパラメータの拡張や移植が容易であること

デメリット:スクリプトの実行には、パラメータの入力が多く必要

まとめ:パラメータの受け渡しにgetoptsを使うことをお勧めします。

方法3:直接参照で変数を宣言する

まず、test1.sh スクリプトで変数 AA BB CC DD を宣言してください。

AA=11
BB=22
CC=33
DD=44

test2.shスクリプトの変数AA BB CCを参照し、次のように表示します。

echo $AA $BB $CC $AA

注意:スクリプトを実行する際、スクリプトの外部で宣言された変数を参照する場合は(.スクリプト名)、ローカルエリア外の変数を参照しない場合は(shスクリプト名)を使用します。

シェルでスクリプトのパラメータを渡す2つの方法については、今回で終了です。シェルパラメータの渡し方については、スクリプトハウスの過去記事を検索するか、以下の記事を引き続き閲覧してください。