はじめに
このチャレンジでは、for や while などのループ構造(繰り返し処理)を使用して、ファイルやコマンドラインからの入力を処理するシンプルなシェルスクリプトの作成方法を学びます。シェルスクリプトは、反復的なタスクを自動化し、ワークフローを効率化するための強力なツールです。このチャレンジを完了することで、動的な入力を処理し、さまざまな操作を実行できるシェルスクリプト開発の実践的な経験を積むことができます。
for ループを使用したシェルスクリプトの作成
このステップでは、for ループを使用してディレクトリ内のファイルリストを反復処理し、各ファイルに対して操作を実行するシェルスクリプトを作成します。このスクリプトを通じて、シェルスクリプトでよく行われるタスクである「複数のファイルを動的に処理する方法」を理解します。
タスク
- 指定されたディレクトリ内のファイルリストを
forループで巡回するシェルスクリプトを作成してください。 - 見つかった各ファイルについて、スクリプトはファイル名とその内容を出力する必要があります。
要件
- スクリプト名は
list_files.shとしてください。 - スクリプトは
~/projectディレクトリに配置してください。 - スクリプトの先頭には
#!/bin/bashシバン(Shebang)を記述してください。 - スクリプトは、第 1 コマンドライン引数としてディレクトリパスを受け取るようにしてください。
- 提供されたディレクトリ内のファイルを反復処理するために
forループを使用してください。 - 通常のファイル(Regular file)が見つかるたびに、スクリプトは "File: " に続けてファイルのベース名を表示し、その後にファイルの内容全体を表示してください。
- ディレクトリ引数が指定されていない場合、スクリプトは使い方のメッセージ(Usage message)を表示し、0 以外のステータスコードで終了してください。
実行例
~/project 内に list_files.sh を作成し、実行権限を付与したと仮定します。引数に ~/project を指定して実行すると、出力は以下のようになります。
[labex@host ~]$ cd ~/project
[labex@host project]$ chmod +x list_files.sh
[labex@host project]$ ./list_files.sh ~/project
File: file1.txt
Content of file1.txt
File: file2.txt
Content of file2.txt
File: file3.txt
Content of file3.txt
[labex@host project]$
引数なしでスクリプトを実行した場合は、使い方のメッセージを表示する必要があります。
[labex@host project]$ ./list_files.sh
Usage: ./list_files.sh <directory_path>
[labex@host project]$ echo $?
1
[labex@host project]$
※ ファイルの具体的な内容は、作成したファイルの中身に依存します。
ヒント
- スクリプトに渡された第 1 コマンドライン引数にアクセスするには、特殊変数
$1を使用できます。 - ディレクトリ内のファイルを反復処理するには、
"$1"/*のようなワイルドカードパターンを使用できます。 - 項目がディレクトリではなく通常のファイルであるか確認するには、
if文と-fテスト演算子(例:if [ -f "$file" ])を使用します。 - フルパスからファイル名のみを抽出するには
basenameコマンドが便利です。例えば、basename /home/labex/project/file1.txtはfile1.txtを出力します。 - ファイルの内容を表示するには
catコマンドを使用できます。 chmod +xを使用してスクリプトを実行可能にするのを忘れないでください。- 変数が空かどうかをチェックするには、
if [ -z "$variable" ]を使用できます。 - 特定のステータスコードでスクリプトを終了させるには、
exit <status_code>を使用します。
まとめ
このチャレンジでは、for ループを使用してディレクトリ内のファイルを反復処理し、それらに対して操作を実行するシンプルなシェルスクリプトの作成方法を学びました。コマンドライン引数の受け取り、入力のバリデーション、および条件文(if)を使用して通常のファイルのみを処理する実習を行いました。また、ファイル名を抽出するための basename や、ファイル内容を表示するための cat も使用しました。これらのスキルは、Linux 環境におけるタスクの自動化、データ処理、効率的なファイル管理の基礎であり、RHCSA 認定試験や日常のシステム管理業務において不可欠なものです。



