このページで解説している内容は、以下の YouTube 動画の解説で見ることができます。
【Linux】シェルスクリプト: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-9 | function check_even_or_odd() { ... } | check_even_or_odd 関数を定義しています。 |
4-8 | if [ $(($1 % 2)) -eq 0 ]; then ... fi | 数値が偶数か奇数かを判定します。 |
5 | echo "$1 is even." | 数値が偶数の場合、メッセージを表示します。 |
7 | echo "$1 is odd." | 数値が奇数の場合、メッセージを表示します。 |
11 | number=5 | チェックする数値を設定します。 |
12 | check_even_or_odd $number | check_even_or_odd 関数を呼び出し、数値を渡します。 |
「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コマンド: 現在のシェルプロセスを新しいプロセスで置き換えます。これにより、スクリプト実行後に元のシェルに戻らず、ログアウトされます。