Linuxでカスタムシェル関数とライブラリを作成・活用する方法
Linuxにおいて、シェルスクリプトはシステム管理タスクの実行や自動化、簡単なコマンドラインツールの作成など、さまざまな場面で役立ちます。本記事では、Linux初心者の方に向けて、独自のシェルスクリプトを保存すべき信頼性の高い場所、カスタムシェル関数やライブラリの書き方、そして他のスクリプトからライブラリ内の関数を呼び出す方法について解説します。
シェルスクリプトの保存場所
スクリプトを実行するときに毎回フルパス(絶対パス)を入力せずに済むようにするには、そのスクリプトを $PATH 環境変数に含まれるいずれかのディレクトリに保存しておく必要があります。
現在の $PATH の内容は、以下のコマンドで確認できます。
$ echo $PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
通常、ユーザーのホームディレクトリに bin ディレクトリが存在すれば、自動的にそのユーザーの $PATH に追加されます。つまり、ここに自分のシェルスクリプトを保存しておけば便利です。
それでは、bin ディレクトリを作成しましょう。このディレクトリには、Perl や Awk、Python のスクリプトなど、その他のプログラムも保存できます。
$ mkdir ~/bin
次に、「lib」(libraries=ライブラリの略)という名前のディレクトリを作成します。ここには自分用のライブラリを置きます。C言語やPythonなどの他言語用のライブラリを保存しても構いません。さらに、その下に sh というサブディレクトリを作りましょう。ここは特に、シェルライブラリ専用の場所として使います。
$ mkdir -p ~/lib/sh
独自のシェル関数とライブラリを作成する
シェル関数とは、スクリプトの中で特定のタスクを実行するためにまとめられたコマンドの集まりです。他のプログラミング言語におけるプロシージャ、サブルーチン、関数と同じような働きをします。
関数を記述する基本構文は次のとおりです。
function_name() { list of commands }
たとえば、date コマンドで日付を表示するだけの関数なら、以下のようにスクリプト内に書けます。
showDATE() {date;}
日付を表示したいときは、この関数を名前だけで呼び出すだけです。
$ showDATE
シェルライブラリは、単なるシェルスクリプトの一種です。ただし、ライブラリとしては「後から他のシェルスクリプトから呼び出せる関数」だけを格納する目的で作成するのが一般的です。
以下は、~/lib/sh ディレクトリに配置した libMYFUNCS.sh というライブラリの例です。複数の関数が定義されています。
#!/bin/bash
#PATH内のディレクトリを見やすく一覧表示する関数
showPATH() {
oldifs="$IFS" #既存の内部フィールドセパレータを退避
IFS=: #新しい内部フィールドセパレータを指定
for DIR in $PATH ; do echo $DIR ; done
IFS="$oldifs" #元の内部フィールドセパレータを復元
}
#ログイン中のユーザーを表示する関数
showUSERS() {
echo -e "Below are the user logged on the system:\n"
w
}
#ユーザーの詳細情報を出力する関数
printUSERDETS() {
oldifs="$IFS" #既存の内部フィールドセパレータを退避
IFS=: #新しい内部フィールドセパレータを指定
read -p "Enter user name to be searched:" uname #ユーザー名を読み込み
echo ""
#ヒア文字列から、: を区切り文字として値を読み込み変数へ格納
read -r username pass uid gid comments homedir shell <<< "$(cat /etc/passwd | grep "^$uname")"
#取得した値を出力
echo -e "Username is : $username\n"
echo -e "User's ID : $uid\n"
echo -e "User's GID : $gid\n"
echo -e "User's Comments : $comments\n"
echo -e "User's Home Dir : $homedir\n"
echo -e "User's Shell : $shell\n"
IFS="$oldifs" #元の内部フィールドセパレータを復元
}
ファイルを保存したら、スクリプトに実行権限を付与してください。
ライブラリから関数を呼び出す方法
ライブラリ内の関数を使用するには、まず対象のライブラリを、その関数を使いたいシェルスクリプトに組み込む必要があります。読み込み方は以下のいずれかの形式です。
$ ./path/to/lib OR $ source /path/to/lib
これにより、別のスクリプトから ~/lib/sh/libMYFUNCS.sh 内の printUSERDETS 関数を使えるようになります。特定ユーザーの詳細情報を表示するためのコードを新しく書く必要はなく、既存の関数を呼び出すだけで済みます。
test.sh という名前の新規ファイルを作成してみましょう。
#!/bin/bash #ライブラリを読み込み . ~/lib/sh/libMYFUNCS.sh #ライブラリ内の関数を使用 printUSERDETS #スクリプト終了 exit 0
保存後、実行権限を付与してスクリプトを実行します。
$ chmod 755 test.sh $ ./test.sh
本記事では、シェルスクリプトを保存すべき適切な場所、独自のシェル関数やライブラリの書き方、そして通常のシェルスクリプトからライブラリ内の関数を呼び出す方法を紹介しました。
次回は、Vim をBashスクリプティング用のIDEとして設定するシンプルな方法を解説予定です。ぜひお楽しみに。
-
シェルスクリプトでヒアドキュメント(Heredoc)を使いこなす方法
ヒアドキュメント(Heredoc)とは、特別なコードブロックとして扱われる入力やファイルストリームのリテラルのことです。このコードブロックはコマンドへ渡されて処理されます。ヒアドキュメントはUNIXシェルに由来する機能で、sh、tcsh、ksh、bash、zsh、cshなど主要なLinuxシェルで利用できます。さらに、Perl、Ruby、PHPといった他のプログラミング言語でも同様の機能がサポートされています。 ヒアドキュメントの基本構造 ヒアドキュメントは、2つの山括弧 (<<) の後にデリミタ(区切りトークン)を続けて記述します。そして、開始時に使ったのと同じデリミタでコードブ
-
iOS 13でNFCタグを読み書きする方法|iPhoneでの設定手順をわかりやすく解説
近年のスマートフォンには、端末同士で情報をやり取りできる「NFC」という機能が搭載されています。NFCは「Near Field Communication(近距離無線通信)」の略称で、スマートフォンとの間で情報を送受信できる無線通信技術のことです。 この機能を使えば、製品やサービス、観光名所などに関する情報に瞬時にアクセスできます。デバイスをワイヤレスで接続するには、NFCに対応したスマートタグ、いわゆる「NFCタグ」が必要です。 本記事では、NFCタグの基本知識から、iPhone(iOS 13)を使ったNFCタグの読み書き方法まで、詳しく解説します。 NFCタグとは? NFCタグとは、NFC