ループを使用したシェルスクリプトの作成

Red Hat Enterprise LinuxBeginner
オンラインで実践に進む

はじめに

このチャレンジでは、forwhile などのループ構造(繰り返し処理)を使用して、ファイルやコマンドラインからの入力を処理するシンプルなシェルスクリプトの作成方法を学びます。シェルスクリプトは、反復的なタスクを自動化し、ワークフローを効率化するための強力なツールです。このチャレンジを完了することで、動的な入力を処理し、さまざまな操作を実行できるシェルスクリプト開発の実践的な経験を積むことができます。

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.txtfile1.txt を出力します。
  • ファイルの内容を表示するには cat コマンドを使用できます。
  • chmod +x を使用してスクリプトを実行可能にするのを忘れないでください。
  • 変数が空かどうかをチェックするには、if [ -z "$variable" ] を使用できます。
  • 特定のステータスコードでスクリプトを終了させるには、exit <status_code> を使用します。
✨ 解答を確認して練習

まとめ

このチャレンジでは、for ループを使用してディレクトリ内のファイルを反復処理し、それらに対して操作を実行するシンプルなシェルスクリプトの作成方法を学びました。コマンドライン引数の受け取り、入力のバリデーション、および条件文(if)を使用して通常のファイルのみを処理する実習を行いました。また、ファイル名を抽出するための basename や、ファイル内容を表示するための cat も使用しました。これらのスキルは、Linux 環境におけるタスクの自動化、データ処理、効率的なファイル管理の基礎であり、RHCSA 認定試験や日常のシステム管理業務において不可欠なものです。