このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。
Linuxコマンドの基本:シェルスクリプト:シェル関数

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

シェル関数の定義方法
シェルスクリプトで利用される関数はシェル関数と呼ばれます。シェル関数は以下のように定義します。
関数定義の書式
1. function
を使用した関数定義
function 関数名 () {
# 処理
}
2. function
を省略した関数定義
関数名 () {
# 処理
}
解説
関数名
:定義する関数の名前です。{ }
内に、関数で実行したいコマンドや処理を記述します。
これらの書き方には機能的な違いはありません。一般的には function
を省略した書き方 がよく使われています。
シェル関数の使用例
シェル関数を利用する際は、通常のコマンドと同じように、関数名をそのまま記述して呼び出します。ただし、関数は使用する前に定義しておく必要があります。
例:ディスク使用量とメモリ使用量を表示するスクリプト(sysinfo.sh
)
このスクリプトでは、disk_usage
と memory_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
まとめ
- シェル関数を使用することで、繰り返し使用する処理をまとめて管理できます。
- 関数の定義方法にはいくつかありますが、一般的には
関数名 () { 処理 }
の形式がよく使われます。 - 関数は使用する前に定義しておく必要があります。
- シェル関数を活用すると、スクリプトの再利用性や可読性が向上します。
シェルスクリプトを効率的に作成するために、シェル関数を積極的に活用してみてください。