2つのサンプルシェルスクリプトで学ぶBash位置パラメータの使い方
Bashのパラメータとは
パラメータとは、値を格納するための実体です。名前・数字・特殊文字のいずれかで表され、このうち名前で表されるパラメータを「変数」と呼びます。一部の変数はあらかじめシステムによって設定されており、その多くにはユーザーが値を代入することはできません。
こうした変数には有用な情報が格納されており、シェルスクリプトはこれらを参照することで、自分がどのような環境で実行されているのかを把握できます。
Bashが提供するパラメータには、主に次の2種類があります。
- 位置パラメータ(Positional Parameter)
- 特殊パラメータ(Special Parameter)
本記事では、サンプルスクリプトを交えながら、Bashの位置パラメータについて詳しく解説します。なお、この記事は連載中のBashチュートリアルシリーズの一部です。
例1:Bash位置パラメータ($0、$1、$2…)
位置パラメータとは、スクリプトの実行時に渡される引数のことです。$1から$Nまで使用できます。番号が2桁以上になる場合は、${10}のように波括弧({ })で囲む必要がある点に注意してください。
変数$0には、呼び出されたプログラムのベース名(ファイル名)が格納されます。
以下の例では、2つの引数を受け取り、その整数同士の四則演算結果を出力します。
まず、次のようにarithmetic.shというシェルスクリプトを作成しましょう。
$ cat arithmetic.sh #!/bin/bash echo -e "\$1=$1" echo -e "\$2=$2" let add=$1+$2 let sub=$1-$2 let mul=$1*$2 let div=$1/$2 echo -e "Addition=$add\nSubtraction=$sub\nMultiplication=$mul\nDivision=$div\n"
続いて、適切なパラメータを指定してarithmetic.shを実行します。
$ ./arithmetic.sh 12 10 $1=12 $2=10 Addition=22 Subtraction=2 Multiplication=120 Division=1
この出力結果を見ると、$1には12、$2には10が格納されていることが分かります。
シェル組み込みコマンド「let」を使うと、シェル変数に対して算術演算を実行できます。上記のスクリプトでは、渡されたパラメータに対して加算・減算・乗算・除算を行っています。
例2:setコマンドによる位置パラメータの設定と解除
組み込みコマンド「set」を使用すると、位置パラメータを設定(set)したり解除(unset)したりできます。
まず、次のようにpositional.shというシェルスクリプトを作成します。
$ cat positional.sh #!/bin/bash # コマンドライン引数の出力 echo -e "Basename=$0" echo -e "\$1=$1" echo -e "\$2=$2" echo -e "\$3=$3" # set組み込みコマンドによる設定 set First Second Third echo -e "\$1=$1" echo -e "\$2=$2" echo -e "\$3=$3" # ハイフン(-)付きで位置パラメータを保存 set - -f -s -t echo -e "\$1=$1" echo -e "\$2=$2" echo -e "\$3=$3" # 位置パラメータの解除 set -- echo -e "\$1=$1" echo -e "\$2=$2" echo -e "\$3=$3"
このスクリプトは、最初にコマンドライン引数を出力した後、setコマンドで位置パラメータを明示的に設定します。「set --」のようにハイフン(-)を付けるとオプション指定の終了を意味し、それ以降の引数は「-」で始まるものも含めて、すべて位置パラメータとして扱われます。また、他の引数を指定せずに「set --」だけを実行すると、すべての位置パラメータが解除されます。
続いて、以下のようにpositional.shを実行してみましょう。
$ ./positional.sh Basename=positional.sh $1=12 $2=10 $3= $1=First $2=Second $3=Third $1=-f $2=-s $3=-t $1= $2= $3=
まとめ
位置パラメータを使いこなせるようになると、スクリプトへ柔軟に引数を渡せるようになり、汎用性の高いシェルスクリプトを作成できるようになります。次回の記事では、サンプルを交えてBashの特殊パラメータについて解説しますので、ぜひご覧ください。
-
シェルトレース活用ガイド:シェルスクリプトのコマンド実行をトレースしてデバッグする方法
シェルスクリプトデバッグシリーズの本記事では、3つ目のデバッグモードであるシェルトレース(shell tracing)について解説します。具体的な例を通じて、その仕組みと実際の使い方を見ていきましょう。 シリーズの前回までの記事では、残り2つのデバッグモードであるverboseモードと構文チェックモードについて、わかりやすい例とともにシェルスクリプトのデバッグを有効化する方法を紹介しました。 Linuxでシェルスクリプトのデバッグモードを有効にする方法 – Part 1 シェルスクリプトで構文チェックによるデバッグを行う方法 – Part 2 シェルトレースとは何か シェルトレースとは、シ
-
Bashシェル関数入門:実用的な6つのサンプル例で学ぶチュートリアル
Bashシェル関数とは、複数のUNIX/Linuxコマンドをひとつの名前でグループ化し、後からまとめて実行できるようにする仕組みです。Bashシェル関数は通常のUnixコマンドと同じように呼び出すことができ、現在のシェルコンテキスト内で実行されるため、解釈用の新しいプロセスを生成する必要がありません。bashのエイリアス(alias)と関数はどちらも、長いコマンドや複雑なコマンドに対するショートカットを定義するのに役立ちます。しかし、エイリアスでは制御フローや引数の扱いなど、関数ならではの高度な処理を行うことはできません。本記事では、その違いも含めて詳しく解説していきます。この記事は、進行中の