Linux シェル,引数をランダムに並び替え、動的配列に格納する

スポンサーリンク

鍛錬 195

Linux シェルスクリプト,引数をランダムに並び替え、動的配列に格納する

別の記事にて、引数をランダムに並び替える方法について記述していますが、今回はその並び替えた引数を動的配列に格納するシェルスクリプトについてです。

複数の引数をランダムに並び替える

シェルスクリプト

以下は、引数をランダムに並び替えて動的配列に格納するシェルスクリプト arg_random.sh です。

※ 以下のシェルスクリプトで使用している IFS 及び eval については、別の記事にて記述しています。

IFSを用いた文字列操作

evalを使用して、動的配列に格納する
 

#!/bin/sh

ARG="AAA BBB CCC DDD EEE"  # 引数
ARG_COUNT=3                # 出力する数

# 出力する数を指定して引数をランダムに並び替え
tmp=$(shuf -e $ARG -n $ARG_COUNT)

# デリミタを改行に設定して引数を分解
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

実行結果

以下は、シェルスクリプト arg_random.sh を実行しています。

***@ubuntu:~/***/test/shell$ 
***@ubuntu:~/***/test/shell$ ./arg_random.sh
array_0 = CCC
array_1 = EEE
array_2 = BBB
タイトルとURLをコピーしました