シェルスクリプトでコマンド実行結果を配列で変数代入する方法

目次

スポンサードリンク

Linuxのシェルスクリプトでも配列を使用することができます。配列の宣言と代入は以下のように書きます。

配列の宣言方法

# 例
file_names=(file1.txt file2.txt file3.txt)

配列の要素を、括弧の中に並べ半角スペースで区切ります。イコールの前後には半角スペースは置けません。要注意です。

配列の要素を参照する方法

配列内の要素を参照する方法は ${変数名[インデックス]} です。他の言語と同様、インデックス(添字)はゼロから始まります。

# 例
${file_names[0]}

コマンドの実行結果を配列に保存する方法

例として、httpd のログディレクトリにあるファイル名を配列で変数に入れ一つずつ標準出力するシンプルのスクリプトを作ってます。

サンプルコード

#!/bin/sh

file_names=(`ls -l /var/log/httpd/ | awk '{print $9}'`)

for filename in ${file_names[@]}
do
        echo $filename
done

exit 0

変数file_namesにlsコマンドの実行結果を保存しています。lsコマンドを括弧()て囲んでいます。シェルスクリプトでは()で囲んだコマンドの実行結果を行毎に分解し配列として変数に保存することができます。

後続の処理では、for 文で配列内のファイル名を一つずつechoコマンドで出力しています。この部分を必要な処理に書き換えればファイルそれぞれに対して処理をするなど応用できます。

シェルスクリプトの知識は、プログラマにとって長く役立つ知識です。 私はこちらの書籍で一通り知識を抑えました。基本から丁寧に解説されています。

最短3時間で覚えるLinuxシェルスクリプト
こちらは、シェルスクリプトの基本的な書き方、デバッグ方法、if, case, while, forなど基本的な制御構文について書かれています。30日間の無料体験もできる『Kindle Unlimited』でも読むことができます。