Linux シェル,日時を取得し、項目ごとに分割して配列に格納

スポンサーリンク

鍛錬 158

Linux シェルスクリプト,日時を取得し、年・月・日・時・分・秒ごとに分割して配列に格納する

Linux で、日時を分割して配列に格納する方法についてです。
 
以下に示す通り、日時を取得する際は date でフォーマットを指定して取得します。
その際、年・月・日・時・分・秒の、各項目の終端に改行を付加するために %n を記述します。

date +"%Y%n%m%n%d%n%H%n%M%n%S%n"

 
改行を確認

試しに、日時を取得して項目ごとに改行されているのかを確認します。

***@ubuntu:~/***/test$ 
***@ubuntu:~/***/test$ date +"%Y%n%m%n%d%n%H%n%M%n%S%n"
2018
05
19
05
01
26
 

 
シェルスクリプト

以下のシェルスクリプト get_date_array.sh は、取得した日時を配列に格納します。
配列については、別の記事にて紹介しています。

https://iwakurabit.com/training-pgm-linux-shell-script-use-eval-and-stores-dynamic-array/

#!/bin/sh

ARG_COUNT=6  # 項目の合計数を設定

# 日時を取得
tmp=$(date +"%Y%n%m%n%d%n%H%n%M%n%S%n")

# デリミタを改行に設定して日時を分解
IFS_backup=$IFS
IFS=$'
'
set -- $tmp
IFS=$IFS_backup

# 項目の合計数に応じて,分割したデータを配列に格納
i=0
num=1
while [ $i -lt $ARG_COUNT ]
do
	arg=$(eval echo '$'$num)
	eval "array_$i=\"$arg\""
	num=$(($num + 1))
	i=$(($i + 1))
done

# 格納したデータを表示
i=0
while [ $i -lt $ARG_COUNT ]
do
	arg=$(eval echo '$array_'$i)
	array_name=$(eval echo 'array_'$i)
	echo "$array_name = $arg"
	i=$(($i + 1))
done

 
実行結果

***@ubuntu:~/***/test/shell$ 
***@ubuntu:~/***/test/shell$ ./get_date_array.sh
array_0 = 2018
array_1 = 05
array_2 = 19
array_3 = 05
array_4 = 15
array_5 = 39

 
上記に示した通り、日時を取得して項目ごとに配列に格納することができました。

タイトルとURLをコピーしました