シェルでスクリプトのパラメータを渡す2つの方法について説明します。
方法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つの方法については、今回で終了です。シェルパラメータの渡し方については、スクリプトハウスの過去記事を検索するか、以下の記事を引き続き閲覧してください。
関連
-
バウンスシェルのいくつかのポーズをまとめたもの
-
シェルスクリプトとmy.cnfによるmysqlの追加・削除・設定
-
シェルのPATH変数の使用方法について
-
Linux で jar パッケージを起動するためのカスタムシェルスクリプト
-
シェルで乱数を生成する7つの方法
-
Bashのトリック:変数を改行に割り当てる(ファイルが改行で終わっているかどうかを判断するため)
-
シェルでコマンドにエイリアスを設定する方法 alias
-
シェル $? 関数の戻り値、または直前のコマンドの終了ステータスを取得する
-
Webサイトが生きているかどうかを一括でチェックするスクリプト
-
シェルスクリプトの実践 - whileループ文
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
rm -rfの後にディスク領域が解放されない問題の解決方法
-
データベーステーブルのインクリメンタル同期処理を実装するシェルスクリプト
-
シェルバッチファイルの作成とリネームのサンプルコード
-
シェルスクリプトによるテキストのループ処理についての質問です。
-
[解決済み】Bash スクリプトと /bin/bash^M: bad interpreter: そのようなファイルまたはディレクトリがない [重複] [重複
-
シェルスクリプトでJavaのjarプログラムを起動/停止する方法
-
シェルスクリプトでの$コマンドの使い方まとめ
-
シェルでのsetコマンドの使い方を説明します
-
Linuxでよく使われる圧縮形式の圧縮・解凍方法を解説
-
よく使うシェルコマンドとTips(推奨)