【ITニュース解説】Learn Bash Scripting With Me 🚀 - Day 8
2025年10月01日に「Dev.to」が公開したITニュース「Learn Bash Scripting With Me 🚀 - Day 8」について初心者にもわかりやすく解説しています。
ITニュース概要
Bashスクリプトの位置パラメータは、スクリプトに渡す引数を数値(`$1, $2`など)で扱える特別な変数だ。`$0`はスクリプト名を示す。これを使えば、例えばコマンド実行時にユーザー名を渡すだけで自動的に新しいユーザーを作成するスクリプトが組める。システム管理の自動化に役立つ機能だ。
ITニュース解説
システムエンジニアを目指す皆さんが、日々の業務で効率を上げるために避けて通れない道の一つが「スクリプト」の活用である。特にLinuxなどのUNIX系OSでは、「Bashスクリプト」が非常に強力なツールとなる。Bashスクリプトは、複数のコマンドをまとめて自動実行させるためのプログラムで、これを使えば複雑な作業も一度にこなせるようになる。今回は、そんなBashスクリプトをより柔軟に、そして賢く使うための重要な概念である「位置パラメータ」について詳しく解説する。
位置パラメータとは、簡単に言えば、スクリプトを実行する際に外部から渡される「情報」を受け取るための特別な変数である。皆さんが普段、コマンドを実行する際にファイル名やオプションを一緒に指定するように、Bashスクリプトにも実行時に任意の情報を渡すことができる。この渡された情報をスクリプトの中で利用するために、位置パラメータが使われるのだ。
位置パラメータは、その名前の通り、情報の「位置」に応じて数字が割り当てられている。具体的には、$1, $2, $3といった形で表現され、$1は一番最初に渡された情報(引数)を、$2は二番目に渡された情報を、というように対応する。最大で$9までがこのようなシンプルな形で使えるが、もし10番目以降の情報を扱いたい場合は、${10}, ${11}のように、数字をブレース(中括弧)で囲む必要がある。これは、たとえば$11と書いたときに、Bashが$1という変数と数字の1を区別できず、$1という変数と文字列の1と解釈してしまうのを防ぐためである。
そして、特別な位置パラメータとして「$0」が存在する。これはスクリプト自身が持つ情報で、実行されたスクリプトのファイル名(またはパス)を格納している。つまり、$0を見れば、現在どのスクリプトが実行されているのかがすぐにわかるのだ。これは、スクリプトが自身の名前を使ってログを出力したり、エラーメッセージを分かりやすくしたりする場合に非常に役立つ。
では、実際に位置パラメータがどのように使われるのか、具体的なスクリプトの例を見てみよう。ここでは、新しいユーザーを自動的に作成するスクリプトを例にする。
まず、スクリプトの冒頭には「#!/bin/bash」という行がある。これは「Shebang(シバン)」と呼ばれ、このスクリプトをどのプログラム(ここではBashシェル)で実行するかをシステムに指示する役割を持つ。これにより、明示的にBashを指定しなくても、スクリプトファイルを実行可能にするだけでBashが起動してスクリプトを解釈するようになる。
次に、「echo "Execution of script: $0"」という行だ。ここで先ほど説明した$0が登場する。echoコマンドは指定された文字列を画面に表示するコマンドなので、この行は「Execution of script:」という文字に続いて、現在実行中のスクリプトのファイル名が表示されることを意味する。例えば、./user.shという名前でスクリプトを実行した場合、「Execution of script: ./user.sh」と表示されるだろう。これは、スクリプトがどのように呼び出されたかを確認するのに便利だ。
続いて、「echo "Please enter the name of the new user: $1"」という行がある。ここで$1が登場し、スクリプトに渡された最初の情報、つまり作成したい新しいユーザーの名前が格納されていることを示す。この行も、単に$1の内容を画面に表示しているだけだが、ユーザーに対して「あなたが入力した情報(ユーザー名)はこれですよ」と確認させる意図がある。
そして、スクリプトの核心部分が「adduser --home /$1 $1」という行である。adduserコマンドはLinuxで新しいユーザーを作成するためのコマンドだ。ここで$1が二回使われている点に注目してほしい。
一つ目の--home /$1は、新しく作成するユーザーのホームディレクトリを設定するオプションである。ホームディレクトリは、ユーザーがログインしたときに最初に置かれる作業空間のようなもので、通常は/home/ユーザー名となる。ここで--home /$1とすることで、$1に指定されたユーザー名と同じ名前のディレクトリをルートディレクトリ(/)直下に作成し、それをホームディレクトリとして設定している。例えば、$1が「bob」であれば、/bobがホームディレクトリとなる。
二つ目の$1は、adduserコマンドに渡す「作成するユーザー名」そのものである。つまり、スクリプト実行時に$1として渡された名前が、そのまま新しいユーザーのアカウント名として使われることになる。このように、一つの引数($1)がスクリプト内で複数の異なる目的で利用されることも珍しくない。
このスクリプトを実行する際には、例えばスクリプトファイルがuser.shという名前で保存されている場合、以下のようにコマンドラインに入力する。
./user.sh babs
このコマンドを実行すると、システムは./user.shというスクリプトをBashで実行し、「babs」という文字列が最初の引数としてスクリプトに渡される。このとき、「babs」はスクリプト内の$1に格納されるのだ。そして、スクリプトは$0として./user.shを認識し、$1としてbabsを認識して、その情報に基づいてユーザー作成処理を進める。結果として、「babs」という名前の新しいユーザーが作成され、そのホームディレクトリは/babsに設定されることになる。
この例から分かるように、位置パラメータはスクリプトをより動的に、そして汎用的にするための非常に強力な機能である。スクリプト内に直接ユーザー名を書き込む代わりに、位置パラメータを使うことで、一つのスクリプトで様々なユーザーを簡単に作成できるようになる。これは、システム管理者やエンジニアが日々の繰り返し作業を自動化する上で不可欠な技術である。
まとめると、以下の二つの位置パラメータが特に重要だ。 $0: スクリプト自身のファイル名を表す。 $1: スクリプトに渡された最初の引数を表す。
これら位置パラメータを理解し使いこなすことは、Bashスクリプティングをマスターするための第一歩であり、システム管理や自動化のスキルを大きく向上させることにつながるだろう。