このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。

新Linuxコマンド演習33

新Linuxコマンド演習33 概要

新Linuxコマンド演習33」では、シェルスクリプトの引数の利用方法を学びます。
さらに、シェルスクリプトの作成方法if文による条件分岐の基本も実践的に理解していきます。

シェルスクリプトは、複数のコマンドをまとめて自動実行できる強力な仕組みであり、
日常的な作業の効率化や運用自動化に欠かせません。

本演習では、実際にスクリプトを作成して実行権限を付与し、引数を指定して動作を確認します。
特に $1、$2、$# などの引数展開変数の意味と使い方を理解することが目的です。

シェルスクリプトで使用する主な引数展開変数

変数内容
$0スクリプト自身のファイル名
$11番目の引数
$22番目の引数
$#引数の総数
$@全ての引数(個別展開)
$*全ての引数(文字列として展開)

表の説明
シェルスクリプトにおいて引数は、コマンドラインでスクリプト名の後に指定される値です。
$1, $2 などを使うことで、それぞれの引数をプログラム内で参照できます。
また、$# は引数の数を取得できるため、引数チェックなどの条件分岐にも活用されます。

演習問題+模範解答例

演習01:ディレクトリとファイルを作成する

問題
source ディレクトリと dest ディレクトリを作成し、source 内に3つのファイルを作成してください。

模範解答例

[suzuki@AlmaLinux ~]$ mkdir source dest
[suzuki@AlmaLinux ~]$ date > source/data1.txt
[suzuki@AlmaLinux ~]$ date > source/data2.txt
[suzuki@AlmaLinux ~]$ date > source/data3.txt
[suzuki@AlmaLinux ~]$ ls source
data1.txt  data2.txt  data3.txt

解説

  • mkdir コマンドでディレクトリを作成します。
  • date > ファイル名 により、日付情報をファイルとして保存します。
  • ls source で3つのファイルが存在することを確認します。

演習02:シェルスクリプトを作成する

問題
ファイルをコピーするシェルスクリプト copy_files.sh を作成してください。

模範解答例

[suzuki@AlmaLinux ~]$ nano copy_files.sh

以下の内容をnanoエディタに入力して保存します。

#!/bin/bash

# コメント: ファイルをコピーして新しいディレクトリに保存するスクリプト
# 使用法の表示
usage() {
    echo "Usage: $0 source_directory destination_directory"
    exit 1
}

# 引数の確認
if [ "$#" -ne 2 ]; then
    usage
fi

# 変数に引数を格納
source_dir="$1"
destination_dir="$2"

# コピー実行
cp -r "$source_dir" "$destination_dir"

echo "Files copied from $source_dir to $destination_dir"

解説

  • 冒頭の #!/bin/bash は「シェバン」と呼ばれ、スクリプトの実行シェルを指定します。
  • usage() 関数ではスクリプトの使い方を表示します。
  • if [ "$#" -ne 2 ] は、引数が2つでない場合に使用法を表示して終了させます。
  • $1, $2 で引数を取得し、cp -r でディレクトリを再帰的にコピーします。

演習03:実行権限を付与する

問題
作成したシェルスクリプトに実行権限を与えてください。

模範解答例

[suzuki@AlmaLinux ~]$ chmod a+x copy_files.sh
[suzuki@AlmaLinux ~]$ ls -l copy_files.sh
-rwxrwxr-x. 1 suzuki suzuki 459  1月 30 22:46 copy_files.sh

解説

  • chmod a+x により、すべてのユーザーに対して実行権限を追加します。
  • ls -l で実行権限 ( x ) が付与されたことを確認します。

演習04:スクリプトを実行する

問題
copy_files.sh を実行し、正しい引数指定と誤った引数指定の両方を試してください。

模範解答例

(1)引数が不足している場合

[suzuki@AlmaLinux ~]$ ./copy_files.sh source
Usage: ./copy_files.sh source_directory destination_directory

(2)正しい引数を指定した場合

[suzuki@AlmaLinux ~]$ ./copy_files.sh source dest
Files copied from source to dest
[suzuki@AlmaLinux ~]$ ls dest/source
data1.txt  data2.txt  data3.txt

解説

  • 引数が1つしか指定されていない場合は、usage() 関数が呼び出されて使用方法が表示されます。
  • 正しい引数を2つ指定した場合、source ディレクトリの内容が dest ディレクトリ内にコピーされます。

演習終了時の作業:ファイルの削除

問題
演習で作成したファイルとディレクトリを削除してください。

模範解答例

[suzuki@AlmaLinux ~]$ rm -r source dest
[suzuki@AlmaLinux ~]$ rm copy_files.sh

解説
rm -r はディレクトリとその中身を再帰的に削除します。
作業ディレクトリをクリーンな状態に戻して演習を終了します。

まとめ

新Linuxコマンド演習33」では、

  • シェルスクリプトの作成と実行権限の付与方法
  • $1, $2, $# などの引数展開変数の使い方
  • if 文による条件分岐と usage() 関数の設計
  • 実際のスクリプト実行と動作確認手順

を学びました。

この演習を通じて、スクリプトを使って引数を受け取り動的に処理を行う仕組みを理解できます。
この知識は、実運用スクリプトの作成や自動化タスクの基礎として非常に重要です。