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

Linuxコマンド演習33

以下のコマンドの演習を行います。

実際にコマンド操作を行いながら、Linuxの操作に慣れていきましょう。

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

・ディレクトリとファイルを作成します。

$ mkdir source
$ mkdir dest
$ date > source/data1.txt
$ date > source/data2.txt
$ date > source/data3.txt
$ ls
Desktop    Downloads  Pictures  Templates  dest
Documents  Music      Public    Videos     source
$ ls source
data1.txt  data2.txt  data3.txt

演習02:シェルスクリプトのファイルを作成します。

ファイルをコピーして新しいディレクトリに保存するシンプルなシェルスクリプトを作成します。

・「copy_files.sh」を作成します。

$ vi copy_files.sh

・viエディタで「i」キーを押して、挿入モードにして下記のスクリプト内容をコピーして貼り付けて保存します。

 viエディタで保存して終了するには、「Esc」キーを押してコマンドモードにして「:wq」と入力します。

#!/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"

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

・シェルスクリプトに実行権限を与えます。

$ chmod a+x copy_files.sh
$ ls -l copy_files.sh
-rwxrwxr-x. 1 user01 user01 459  1月 30 22:46 copy_files.sh

シェルスクリプト(copy_files.sh)の解説

スクリプトの始まり : シェバン(シバン)

#!/bin/bash

 シェバンは、スクリプトがどのシェルで実行されるべきかを指定します。この例では、Bashシェル (/bin/bash) を使用しています。他のシェルも指定できます。

使用法の表示関数

usage() {
    echo "Usage: $0 source_directory destination_directory"
    exit 1
}

 'usage' 関数は、スクリプトの正しい使用法を表示し、スクリプトを終了します。'$0' はスクリプト自体の名前を指します。

引数の確認

if [ "$#" -ne 2 ]; then
    usage
fi

 '$#' は引数の数を表し、この例では引数が2つでない場合は 'usage' 関数を呼び出して使用法を表示し、スクリプトを終了します。'-ne' は、2つの数値が等しくない場合は真となる数値の比較演算子です。

変数に引数を格納

source_dir="$1"
destination_dir="$2"

 引数を変数に格納します。'$1' は1番目の引数(コピー元ディレクトリ)、'$2' は2番目の引数(コピー先ディレクトリ)です。

ファイルのコピー実行

cp -r "$source_dir" "$destination_dir"

 '-r' オプションはディレクトリを再帰的にコピーするためのものです。ここでは、cp コマンドを使用してファイルをコピーしています。

結果の表示

echo "Files copied from $source_dir to $destination_dir"

コピーが正常に終了した場合にメッセージを表示します。

演習04:シェルスクリプトの実行

作成したシェルスクリプト(copy_files.sh)を実行します。

スクリプトを実行する際に、コピー元とコピー先のディレクトリを指定します。

・まず、引数の数を間違えて実行してみます。

 引数にはコピー元とコピー先のディレクトリを指定する必要がありますが、コピー元のディレクトリのみを指定します。

$ ./copy_files.sh source
Usage: ./copy_files.sh source_directory destination_directory

シェルスクリプト(copy_files.sh)の使い方の説明が表示されます。

・コピー元とコピー先のディレクトリを指定してシェルスクリプトを実行します。

$ ./copy_files.sh source dest
Files copied from source to dest
$ ls dest/source
data1.txt  data2.txt  data3.txt

このシェルスクリプトは、指定したディレクトリ以下のファイルを再帰的にコピーします。

 「source」ディレクトリとディレクトリ内のファイルが「dest」ディレクトリにコピーされています。

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

・この演習で作成したディレクトリとファイルを削除します。

$ rm -r source dest
$ rm copy_files.sh