サイトアイコン 協栄情報ブログ

iniファイルについて


この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので十分ご注意ください。

はじめに

シェルスクリプトを学習する際、INIファイルについても基本的な知識を持つことは重要です。
INIファイルは、設定情報を保存するためによく使用されるフォーマットの一つです。多くのアプリケーションやシステムで設定ファイルとして採用されています。

■どのような点でスクリプトに活かせるのか

  1. 設定の外部化:
    INIファイルを使用することで、シェルスクリプト内の設定情報を外部化できます。設定値をINIファイルに記述し、シェルスクリプトからINIファイルを読み込んで設定を取得することができます。これにより、シェルスクリプトの柔軟性と保守性が向上し、設定の変更が容易になります。

  2. 複数の設定の管理:
    INIファイルを使用することで、複数の設定を一つのファイルで管理できます。異なるセクションに設定をグループ化することで、設定情報を整理しやすくなります。シェルスクリプトから適切なセクションの設定を読み込んで利用することができます。

  3. 設定の共有:
    INIファイルを使用することで、複数のシェルスクリプトやプログラムで同じ設定情報を共有できます。INIファイルに設定を集約し、異なるシェルスクリプトから共通の設定を読み込むことができます。これにより、設定の一貫性を保ちながら、複数のスクリプト間で設定を共有することができます。

  4. 設定の変更とテストの容易さ:
    INIファイルを使用することで、設定の変更が容易になります。INIファイルを編集して設定を変更し、シェルスクリプトを再実行するだけで設定の反映が可能です。また、テスト環境と本番環境など、異なる設定を持つINIファイルを使用してスクリプトを実行することで、設定の切り替えやテストの容易さを実現できます。

  5. ドキュメンテーション:
    INIファイルにはコメントを追加することができます。コメントを使用して設定の説明やドキュメンテーションを提供することで、シェルスクリプトの可読性とメンテナンス性を向上させることができます。

基本的構造

INIファイル(.iniファイル)は、設定情報を保存するためのテキストファイルの形式です。以下INIファイルの基本的な構造で説明です。

■INIファイル作成

テキストファイルの拡張子を.iniとし、INIファイルの構造に則り作成していきます。

;以下cofig.iniファイルの内容です。
[User]
Username = Name
Password = mypassword123

[Database]
Name = mydatabase
Host = localhost

■INIファイルをスクリプトで読み込む

1.EC2インスタンスにINIファイルを読み込むtest.shを作成し、先程作成したINIファイルの設定内容を表示させます。

#!/bin/bash

# .iniファイルのパス
CONFIG_FILE="config.ini"

# .iniファイルを読み込む関数
function read_ini_file() {
    local section=$1
    local key=$2
    local value=$(awk -F "=" -v section="$section" -v key="$key" '$0 ~ "^\\["section"\\]" {flag=1} flag==1 && $0 ~ "^"key"[[:space:]]*=" {gsub(/^[[:space:]]+/, "", $2); print $2; flag=0}' "$CONFIG_FILE")
    echo "$value"
}

# .iniファイルから設定を読み込む
username=$(read_ini_file "User" "Username")
password=$(read_ini_file "User" "Password")
database=$(read_ini_file "Database" "Name")
host=$(read_ini_file "Database" "Host")

# 読み込んだ設定の表示
echo "Username: $username"
echo "Password: $password"
echo "Database: $database"
echo "Host: $host"

3行目: .iniファイルのパス
CONFIG_FILEに、config.iniを指定します。

5行目: .iniファイルを読み込む関数の定義
.iniファイルを読み込むための関数read_ini_fileを定義しています。

6行目: sectionというローカル変数を定義し、関数に渡された第1引数を代入します。
.iniファイルのセクション名を指定するための引数です。

7行目: keyというローカル変数を定義し、関数に渡された第2引数を代入します。
.iniファイル内のキーを指定するための引数です。

8行目: awkコマンドを使用して、.iniファイルを解析します。
-F " = " -v section="$section" -v key="$key" '$0 ~ "^\\["section"\\]" {flag=1} flag==1 &&

$0 ~ "^"key"[[:space:]]*="は、キーとイコール記号が続く行を検索します。見つかった場合、$2(2番目のフィールド)を出力し、flagを0に設定します。

{gsub(/^[[:space:]]+/, "", $2); print $2; flag=0} "$CONFIG_FILE")

変数valueに、awkコマンドの結果(キーに対応する値)を代入します。

9行目:value(設定値)を表示します。

12~15行目: .iniファイルから設定を読み込む
read_ini_fileで読み込んだ値を変数に入れます。

17~20行目: 読み込んだ設定の表示します。

2.スクリプトを実行するとconfig.iniで設定した値が表示されていることが確認できました。

設定値を変更し、反映されるか確認

config.iniの値を変更して、再度スクリプトを実行し設定内容が反映されているか確認します。

↓config.iniの設定を任意の値に変更

[User]
Username = shiraiwa
Password = mypassword456

[Database]
Name = MyDB
Host = 127.0.0.1

↓変更後の表示

まとめ

簡単なINIファイルの説明とスクリプトへの活かし方でした。

INIファイルを活用することで、スクリプトの設定管理の柔軟性、保守性、再利用性が向上します。設定情報を外部化し、INIファイルを介して設定を取得することで、スクリプトの柔軟性を高め、変更やテストの容易さを実現できます。

あと、正規表現は奥が深いですね。。。

モバイルバージョンを終了