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

シェルスクリプト:functionコマンド

シェルスクリプト:functionコマンド

 シェルスクリプトは、LinuxやUNIXシステムでのタスク自動化やシステム管理において非常に強力なツールです。シェルスクリプトを書く際に、繰り返し使う処理や論理的にまとまった処理を一つの単位としてまとめることが重要です。これを実現するための手段の一つが「関数」です。

 関数を使用することで、コードの再利用性が向上し、スクリプトの可読性や保守性が改善されます。シェルスクリプトにおける関数は、プログラミング言語における関数と同様に、特定のタスクを実行するための命令の集合です。

関数の定義

 シェルスクリプトで関数を定義するには、functionコマンドを使用します。構文は以下の2通りがあります。

【構文】
function 関数名(){ コマンド; }

 または

function

 関数名()
 {
  コマンド
 }

functionコマンドを用いたシェルスクリプトの例

例:与えられた数値が偶数か奇数かを判定するスクリプト「check_even_or_odd.sh」

キストエディタ(nanoエディタ)などで「check_even_or_odd.sh」を作成します。

・「nano check_even_or_odd.sh 」コマンドを実行します。

user01@ubuntu-vm:~$ nano check_even_or_odd.sh

 以下のシェルスクリプトを入力したら、「Ctrl + S」 を押して、内容を保存して「Ctrl + X」 を押して nano を終了します。

このスクリプトは、与えられた数値が偶数か奇数かを判定する関数を使用しています。

#!/bin/bash

function check_even_or_odd() {
    if [ $(($1 % 2)) -eq 0 ]; then
        echo "$1 is even."
    else
        echo "$1 is odd."
    fi
}

number=5
check_even_or_odd $number
「even_or_odd.sh」スクリプトの解説
行番号コード説明
1#!/bin/bashシェルスクリプトのインタプリタを指定します。
3-9function check_even_or_odd() { ... }check_even_or_odd関数を定義しています。
4-8if [ $(($1 % 2)) -eq 0 ]; then ... fi数値が偶数か奇数かを判定します。
5echo "$1 is even."数値が偶数の場合、メッセージを表示します。
7echo "$1 is odd."数値が奇数の場合、メッセージを表示します。
11number=5チェックする数値を設定します。
12check_even_or_odd $numbercheck_even_or_odd関数を呼び出し、数値を渡します。
「check_even_or_odd.sh」スクリプトの解説
「chech_even_or_odd.sh」スクリプトの実行

・「. check_even_or_odd.sh」コマンドを実行します。

「check_even_or_odd.sh」スクリプトを実行します。

user01@ubuntu-vm:~$ . check_even_or_odd.sh
5 is odd.

execコマンドについて

 execコマンドは、現在のシェルプロセスを置き換えて、新しいコマンドやスクリプトを実行します。構文は以下の通りです。

【構文】
exec スクリプトファイルまたはコマンド

 execコマンドを使用してスクリプトを実行すると、現在のシェルが新しいプロセスで置き換えられ、その後ログアウトします。これは、新しいプロセスが終了すると、元のシェルに戻らないためです。

どのような場面でexecコマンドを使用するのか

1.不要なプロセスが削減してシステムリソースを節約したい場合

 シェルスクリプトの実行後に元のシェルプロセスに戻る必要がない場合、execコマンドを使って現在のシェルを新しいコマンドに置き換えます。これにより、不要なプロセスが削減され、システムリソースの節約につながります。

2.セキュリティのリスクを軽減したい場合

 権限のあるユーザー(例えば、rootユーザーやsudo権限を持つユーザー)でシステム上の操作を続けることはセキュリティリスクを伴います。このリスクを軽減するための一つの方法として、必要な操作を行うスクリプトを実行し、そのスクリプトが完了したら自動的にログアウトする方法があります。execコマンドを使用してこのプロセスを実現できます。

スクリプトを実行してログアウトする

先ほど作成した「check_even_or_odd.sh」スクリプトをexecコマンドを使用して実行してみます。

スクリプトには実行権限を付与しておきます。

・「chmod a+x check_even_or_odd.sh」コマンドを実行します。

user01@ubuntu-vm:~$ chmod a+x check_even_or_odd.sh

・「exec ./check_even_or_odd.sh」コマンドを実行します。

user01@ubuntu-vm:~$ exec ./check_even_or_odd.sh

# ログアウトするためターミナルが終了します。
シェルスクリプトの削除

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

・ターミナル(端末)を起動します。

・「rm check_even_or_odd.sh」コマンドを実行し、「ls」コマンドで削除されたことを確認します。

user01@ubuntu-vm:~$ rm check_even_or_odd.sh
user01@ubuntu-vm:~$ ls
snap          テンプレート  ドキュメント  ピクチャ      公開
ダウンロード  デスクトップ  ビデオ        ミュージック

まとめ

  • functionコマンド: シェルスクリプトで関数を定義するために使用します。関数を使うことで、コードの再利用性や可読性が向上します。
  • execコマンド: 現在のシェルプロセスを新しいプロセスで置き換えます。これにより、スクリプト実行後に元のシェルに戻らず、ログアウトされます。