bashであれば、以下のスクリプトでカレントにあるファイル名を標準出力します。
filenum=(`ls -1 | wc -l`)
files=(`ls -1`)
num=`expr $RANDOM % $filenum`
echo ${files[${num}]}
これと同じことをborne shallとawkしかないWebプラットフォーム上で実現したいのですが、配列が使えないため、困っています。
突然本日中に実現しないといけないため、みなさんのお知恵を拝借したいと存じます。
よい方法をご教授願います。
んー、乱数が難しいです。
もし、awk ではなく、nawk が使えるのであれば、こんな感じでいけます。
#! /usr/bin/sh LIST=`ls` N=`echo "$LIST" | wc -l` echo "$LIST" | /usr/bin/nawk " BEGIN { srand() i = int(rand() * ${N}) + 1 } NR == i { print } "
#! /usr/bin/sh LIST=`ls` N=`echo "$LIST" | wc -l` RND=`od -vAn -N4 -tu4 < /dev/random` echo "$LIST" | /usr/bin/awk " BEGIN { i = ${RND} % ${N} } NR == i { print } "
乱数の精度は、こちらの方が高いです。
一応加工とした回答書いておきます。
要は ls や wc とかが無く、bash と awk しかバイナリがない状況で何とかしたいと理解したのですがbashのみで以下で行けると思いますよ。
>|sh|
files=(*)
echo ${files[$RANDOM%${#files[@]}]}
||<