頻繁に更新されるスクリプトなりプログラムなりは、本体に設定を書いておくと、バージョンアップなどの差し替えの際に面倒だ。それに、場合によってはセキュリティの観点からも別のファイルにしておくことが望ましいこともある。
ということで、シェルスクリプトから外部ファイルを開いて読み込み、配列に挿入し、これを表示するテストを行った。
スポンサードリンク
参考にしたサイトでは、単純にcat を実行し、その結果を配列が受け取るというシンプルなものだった。何かやり方があるのかと思ったけれど、意外にシンプルな結果だった。また、表示の際に行数を表示するおまけをつけたけれど、インクリメントは$i++ のような単純なものではダメらしい。
テストファイル
次のようなテストファイルを用意して読み込ませるテストを行う。空行や変数がどのように扱われるかも確認しておく。どのように、というのは空行がスキップされるのかや変数が展開されるかなどを意味している。
TEST1 TEST2 TEST3 TEST4 $conf
サンプルソース
#!/bin/bash # 2013.04.17 Ver.0.0.1 file read to array test script # init conf="t_sh_file_read.test" p=0 # read to array IFS=$'\n' file=(`cat "$conf"`) # loop for i in ${file[@]} do # display array echo "[$p] $i" echo "---" # p++ let p=${p}+1 done # end exit
インクリメントは「let p=${p}+1」とするようだ。
結果
$ sh t_sh_file_read.sh [0] TEST1 --- [1] TEST2 --- [2] TEST3 --- [3] TEST4 $conf ---
# ついでにARGV もテストすればよかったかな・・
バリエーション
(参考)指定行や範囲を読み出すコマンド
catコマンドとawkの組み合わせ
cat test.text -n | awk "NR>50"
catコマンドとsedの組み合わせ
cat test.text | sed -n "1,10p"
headを使って行頭から読み出す
head test.text -n 10
tailを使って行末から読み出す
tail test.text -n 10
コメント