PR

シェルスクリプトで外部ファイルを配列に読み込む&変数のインクリメント

XWSS016940_s

頻繁に更新されるスクリプトなりプログラムなりは、本体に設定を書いておくと、バージョンアップなどの差し替えの際に面倒だ。それに、場合によってはセキュリティの観点からも別のファイルにしておくことが望ましいこともある。

ということで、シェルスクリプトから外部ファイルを開いて読み込み、配列に挿入し、これを表示するテストを行った。

スポンサードリンク

参考にしたサイトでは、単純に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

参考文献

コメント