PCストレージ規格を解説! 現行の主流から旧規格まで
PCストレージ規格の基本を整理します。SATAとNVMeの違い、PCIe世代、M.2や2.5インチなどの形状、外付けストレージ規格、HDDとSSDの違い をまとめています。
今回は、シェルスクリプト専用UCI関数について紹介します。
これらのシェル関数は主に、OpenWrt専用アプリケーションの初期化スクリプトで使用されています。 そのため、OpenWrtのソフトウェア開発に興味がある方は知っておいて損はありません。
この記事では、サンプルコードとその実行結果を掲載することで、シェルスクリプト専用UCI関数の使い方について説明します。
この記事を通して、読者の方がこれらの関数の使い方を理解し、対象のUCIコンフィグレーションファイルを難なく操作できる助けとなれば幸いです。
補足
この記事はOpenWrtドキュメントの「Configuration in scripts」を参考にしています。
こちらの内容も大変分かりやすく書かれていますので都度参照してみてください。
掲載サンプルコードの操作対象ファイルは、この記事のために作成したUCIコンフィグレーションファイル(/etc/config/sample)です。
このUCIコンフィグレーションファイルはUCIコマンドを使用して作成できます。 読者ご自身の環境で、サンプルコードを実行したい場合は、お手持ちのOpenWrtデバイスのコンソール上で次のコマンドを実行してください。
root@OpenWrt:~# touch /etc/config/sample root@OpenWrt:~# uci batch << EOF > set sample.bool_test=confirm1 > set sample.bool_test.flag1=on > set sample.bool_test.flag2=true > set sample.bool_test.flag3=yes > set sample.bool_test.flag4=enabled > set sample.option_test=confirm2 > set sample.option_test.value1=100 > set sample.option_test.value2=200 > set sample.option_test.value3=300 > set sample.list_test=confirm3 > add_list sample.list_test.items=1 > add_list sample.list_test.items=2 > add_list sample.list_test.items=3 > add_list sample.list_test.items=4 > add_list sample.list_test.items=5 > EOF root@OpenWrt:~# uci commit
上記のコマンド実行後、catコマンドでsampleファイルの中身を見てみると、次のように表示されるはずです。
root@OpenWrt:~# cat /etc/config/sample
config confirm1 'bool_test'
option flag1 'on'
option flag2 'true'
option flag3 'yes'
option flag4 'enabled'
config confirm2 'option_test'
option value1 '100'
option value2 '200'
option value3 '300'
config confirm3 'list_test'
list items '1'
list items '2'
list items '3'
list items '4'
list items '5'
以上より、この記事では、/etc/config/sampleに対してUCI操作をするコードを掲載します。 これを通してシェルスクリプト専用UCI操作関数について、その使い方を理解して頂ければ幸いです。 それでは、次節から説明に入ります。
シェルスクリプト上でUCI用シェル関数を使用するためのライブラリのインクルード方法は次の2パターンです。
以下に、それぞれの方法について説明します。
①通常のシェルスクリプト上で使用するためのインクルード
次のように、シェルスクリプトの行頭で/lib/functions.shをインクルードしてください。
#!/bin/sh . /lib/functions.sh #以下、UCI操作用関数を記述する
これにより、UCI用関数を使用することが可能になります。
②初期化スクリプト上で使用するためのインクルード
初期化スクリプト上で使用する場合は、スクリプトの行頭に次のシェバン宣言を記述します。
#!/bin/sh /etc/rc.common
rc.commonは初期化スクリプトがサポートするstart、stop、restart、reloadなどの操作関数をコールする シェル関数ラッパーを提供します。このrc.commonの中で、/lib/functions.shを内部でインクルードしていますので 結果として上記①と同様の処理がされたことになります。
今回取り上げるサンプルコードは、通常のシェルスクリプトとして作成しています。 もちろん、シェルスクリプト専用UCI関数において、通常のシェルスクリプトと初期化スクリプトでの使用方法に違いはありません。
ここでは、UCIコンフィグレーションファイルをロードして配下のオプションやリストの値を取得・変更するシェルスクリプト専用UCI関数について紹介します。
#!/bin/sh
. /lib/functions.sh
config_load sample
#filename: config_get_test #!/bin/sh . /lib/functions.sh config_load sample config_get arg option_test value1 echo "value : ${arg}"
root@OpenWrt:~# chmod +x config_get_test root@OpenWrt:~# ./config_get_test value : 100
| 真(1) | 偽(0) | 空文字 |
|---|---|---|
| on | off | 左記以外 |
| true | false | |
| yes | no | |
| enabled | disabled |
#filename: config_get_bool_test #!/bin/sh . /lib/functions.sh config_load sample config_get_bool result1 bool_test flag1 config_get_bool result2 bool_test flag2 config_get_bool result3 bool_test flag3 config_get_bool result4 bool_test flag4 echo "result1 : ${result1}" echo "result2 : ${result2}" echo "result3 : ${result3}" echo "result4 : ${result4}"
root@OpenWrt:~# chmod +x config_get_bool_test root@OpenWrt:~# ./config_get_bool_test result1 : 1 result2 : 1 result3 : 1 result4 : 1
root@OpenWrt:~# uci set sample.bool.flag1=off root@OpenWrt:~# ./config_get_bool_test result1 : 0 result2 : 1 result3 : 1 result4 : 1
#filename: config_set_test #!/bin/sh . /lib/functions.sh config_load sample config_set option_test value1 1000
#filename: config_list_foreach_test #!/bin/sh . /lib/functions.sh index=0 output_list_item() { local item="$1" #$1でリスト内のオプションを取得可能です。 echo "[${index}]: ${item}" index=`expr $index + 1` } config_load sample config_list_foreach list_test items output_list_item
root@OpenWrt:~# chmod +x config_list_foreach_test root@OpenWrt:~# ./config_list_foreach_test [0]: 1 [1]: 2 [2]: 3 [3]: 4 [4]: 5
#filename: config_foreach_test #!/bin/sh . /lib/functions.sh output_section() { local section="$1" local value="$2" echo "section-name: ${section}" } config_load sample config_foreach output_section
root@OpenWrt:~# chmod +x config_foreach_test root@OpenWrt:~# ./config_foreach_test section-name: bool_test section-name: option_test section-name: list_test
前節で紹介したconfig_loadの実行を契機として呼び出されるconfig_cb、option_cb、list_cbコールバック関数の定義を開発者側で編集できます。 これらのコールバック関数名は、あらかじめ予約された名前であり、UCIコンフィグレーションファイルのロード時に発生するイベントに応じて実行されます。 開発者はコールバック関数の定義を変更することで、自由にUCIコンフィグレーションファイルを操作できます。
#filename: config_cb_test #!/bin/sh . /lib/functions.sh config_cb() { local type="$1" local name="$2" echo "section-type: ${type}, section-name: ${name}" } config_load sample #ここが実行されるとconfig_cbのトリガに発火します。
root@OpenWrt:~# chmod +x config_cb_test root@OpenWrt:~# ./config_cb_test section-type: confirm1, section-name: bool_test section-type: confirm2, section-name: option_test section-type: confirm3, section-name: list_test section-type: , section-name: <---読み込むセクションがなくなったところでもう1回呼ばれます。
#filename: option_cb_test #!/bin/sh . /lib/functions.sh option_cb() { local option="$1" local value="$2" echo "option-name: ${option}, value: ${value}" } config_load sample
root@OpenWrt:~# chmod +x option_cb_test root@OpenWrt:~# ./option_cb_test option-name: flag1, value: on option-name: flag2, value: true option-name: flag3, value: yes option-name: flag4, value: enabled option-name: value1, value: 100 option-name: value2, value: 200 option-name: value3, value: 300
#filename: list_cb_test #!/bin/sh . /lib/functions.sh index=0 list_cb() { local option="$1" local item="$2" echo "${optiion}[${index}]: ${item}" index=`expr $index + 1` } config_load sample
root@OpenWrt:~# chmod +x list_cb_test root@OpenWrt:~# ./list_cb_test [0]: 1 [1]: 2 [2]: 3 [3]: 4 [4]: 5
PCストレージ規格を解説! 現行の主流から旧規格まで
PCストレージ規格の基本を整理します。SATAとNVMeの違い、PCIe世代、M.2や2.5インチなどの形状、外付けストレージ規格、HDDとSSDの違い をまとめています。
2026年版 はじめてのミニPC おすすめモデル紹介
この記事では「オフィスワーク向け」と「ゲーム&AI向け」の2つの用途に分けて、 はじめてミニPCを購入する方でも選びやすいおすすめモデルを紹介します。
USB4とは何か? パソコン購入前に知っておきたいポイントを整理
USB4とは何かを、パソコン購入前に知っておきたい人向けに整理します。Thunderbolt 4 / 5との違いや、確認ポイントを分かりやすくまとめて紹介します。
初心者向けノートパソコンおすすめ10選 失敗しにくい選び方を整理
ノートパソコンを初めて選ぶ人向けに、比較しやすい10機種を紹介します。メモリ、ストレージ、画面サイズ、重さ、Office有無、保証の見方を整理します。
レーザー彫刻機の選び方を紹介! 家庭向けで見たい方式や確認ポイントを整理
今回はレーザー彫刻機の選び方を紹介します。ダイオード、CO2、ファイバーの違い、家庭用で最初に見たい確認ポイント、代表的な メーカーと製品、家庭で使うときの注意点を整理して紹介します。
2026年版 目元ケアに使いたい アイウォーマー・アイマッサージャーおすすめ5選
アイウォーマー・アイマッサージャーを初めて選ぶ人向けに、温熱、加圧、タッピング、EMS、装着感、安全性を整理し、代表モデル5機種を紹介します。