PR

【課 題】
コマンド実行時に引数を2つ与え,1つ目の引数として与えたファイルの名称を2つ目の引数名に変更するスクリプトを作りなさい。ただし,引数が2つ以外の場合はコマンドの使い方を表示しなさい。

【解 説】
 今回は,シェル・スクリプトを実行するときに,スクリプト名の後に引数を与え,それに応じて処理を施す。一般的に,処理内容によっては,決まった数の引数が必要な場合がある。例えば,今回の課題では,ファイル名を変更する「元のファイル名」と「変更後のファイル名」の2つの引数が必要だ。必要な数の引数が与えられなかった場合には,処理を行う代わりに使い方を表示するというのは,よくあるスクリプトの処理である。

 今回のスクリプトは,「特定数(2つ)の引数が与えられた場合は処理を実行し,与えられなかった場合は使い方を表示する」処理を行う。

 コマンドを実行した際の引数は,位置パラメータに保存される。引数の値を利用する場合は位置パラメータである「$数字」を指定すればよい。例えば,1番目の引数なら「$1」,2番目の引数なら「$2」を指定する。

 ファイル名の変更には,mvコマンドを利用する。今回,元のファイル名は1番目の引数,変更するファイル名は2番目の引数に入っているため,次のように実行する。

mv $1 $2

 また,利用方法の表示には,echoコマンドを利用してメッセージを表示すればよい。

 次にプログラムの流れを考えよう。今回は与えられた引数の数で条件分岐すればよい。すると,図1のようなフローチャートになる。

図1●フローチャート
図1●フローチャート
引数の数に対して分岐を行う。また,条件に一致しない場合にメッセージを表示するように分岐も行う。

 条件分岐はif文を利用する。条件の判断に利用する引数の数は「$#」とすることで取得できる。また,条件の判別にはtestコマンド または[...]コマンドを利用する。判別式は引数の数が2であればよいので,数値が同じ場合に真を返す「-eq」を用いて,次のようにすればよい。

[ $# -eq 2 ]

 また,条件が満たされなかった場合にメッセージを表示するようelse文を利用して分岐を行うようにしておく

【解答例と練習問題は次ページ】