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

Linuxコマンドの基本:シェルスクリプト:シェル関数

シェルスクリプト:シェル関数

 シェルスクリプトを書いていると、同じ処理を何度も実行する場面がよくあります。このようなとき、処理をひとまとめにして関数にしておくと便利です。関数を使うことで、コードの再利用性が高まり、スクリプトの見通しも良くなります。

シェル関数の定義方法

 シェルスクリプトで利用される関数はシェル関数と呼ばれます。シェル関数は以下のように定義します。

関数定義の書式

1. function を使用した関数定義

function 関数名 () {
  # 処理
}

2. function を省略した関数定義

関数名 () {
  # 処理
}

解説

  • 関数名:定義する関数の名前です。
  • { } 内に、関数で実行したいコマンドや処理を記述します。

 これらの書き方には機能的な違いはありません。一般的には function を省略した書き方 がよく使われています。

シェル関数の使用例

 シェル関数を利用する際は、通常のコマンドと同じように、関数名をそのまま記述して呼び出します。ただし、関数は使用する前に定義しておく必要があります

例:ディスク使用量とメモリ使用量を表示するスクリプト(sysinfo.sh

 このスクリプトでは、disk_usagememory_usage という2つのシェル関数を定義し、それぞれディスク使用量とメモリ使用量を表示します。

ステップ1:スクリプトの作成

user01@ubuntu:~$ nano sysinfo.sh

sysinfo.sh の内容

#!/bin/bash

disk_usage () {
  echo "ディスク使用量:"
  df -h /
}

memory_usage () {
  echo "メモリ使用量:"
  free -h
}

# 関数の呼び出し
disk_usage
memory_usage

解説

  • disk_usage 関数
    df -h / コマンドを使用してルートディレクトリのディスク使用量を表示します。
  • memory_usage 関数
    free -h コマンドを使用してメモリの使用状況を表示します。
  • スクリプトの最後で、定義した関数を順番に呼び出しています。

ステップ2:実行権限の付与

user01@ubuntu:~$ chmod +x sysinfo.sh

ステップ3:スクリプトの実行

user01@ubuntu:~$ ./sysinfo.sh
ディスク使用量:
Filesystem      Size  Used Avail Use% Mounted on
/dev/sda2        24G   12G   11G  53% /
メモリ使用量:
               total        used        free      shared  buff/cache   available
Mem:           3.8Gi       1.2Gi       1.8Gi        34Mi       1.0Gi       2.6Gi
Swap:          3.8Gi          0B       3.8Gi

解説

  • ディスク使用量
    df -h / コマンドの結果が表示され、ルートディレクトリのディスク使用状況が確認できます。
  • メモリ使用量
    free -h コマンドの結果が表示され、システムのメモリ使用状況が確認できます。

関数定義の順序に関する注意

 関数は使用する前に定義しておく必要があります。以下のように関数の呼び出しを関数定義より前に書くと、エラーが発生します。

エラー例

下のようにsysinfo.shを編集して実行してみましょう。

#!/bin/bash

# 関数の呼び出し
disk_usage
memory_usage

disk_usage () {
  echo "ディスク使用量:"
  df -h /
}

memory_usage () {
  echo "メモリ使用量:"
  free -h
}

実行結果

user01@ubuntu:~$ ./sysinfo.sh
./sysinfo.sh: 行 4: disk_usage: コマンドが見つかりません
./sysinfo.sh: 行 5: memory_usage: コマンドが見つかりません

解説

  • 関数が定義される前に呼び出されているため、コマンドが見つかりません というエラーが表示されます。

ここで作成したシェルスクリプトを削除します

user01@ubuntu:~$ rm sysinfo.sh

まとめ

  • シェル関数を使用することで、繰り返し使用する処理をまとめて管理できます。
  • 関数の定義方法にはいくつかありますが、一般的には 関数名 () { 処理 } の形式がよく使われます。
  • 関数は使用する前に定義しておく必要があります。
  • シェル関数を活用すると、スクリプトの再利用性や可読性が向上します。

シェルスクリプトを効率的に作成するために、シェル関数を積極的に活用してみてください。