Skip to content

Instantly share code, notes, and snippets.

@benzBrake
Last active May 19, 2019 13:31
Show Gist options
  • Select an option

  • Save benzBrake/ff60208a24da617386dbe4c0f7cefd3b to your computer and use it in GitHub Desktop.

Select an option

Save benzBrake/ff60208a24da617386dbe4c0f7cefd3b to your computer and use it in GitHub Desktop.
Shell script for generating a large number of files randomly, support multithreading / SHELL脚本使用多线程随机生成大量文件
#!/bin/sh
# 文件生成路径 / Directory
TMPDIR="./tmp"
# 线程数 / Thread numbers
THNUM=5
# 文件数量 / File numbers
JOBNUM=100000
function randStr
{
if [[ ! -n "$1" ]]; then
LEN=1000
else
LEN=$1
fi
j=0;
for i in {a..z}; do
array[$j]=$i;j=$(($j+1))
done
for i in {A..Z}; do
array[$j]=$i;j=$(($j+1))
done
for ((i=0;i<${LEN};i++)); do
STRS="$STRS${array[$(($RANDOM%$j))]}"
done
echo ${STRS}
}
function createFile() {
if [[ ! -n "$1" ]]; then
FILENAME="tmpfile"
else
FILENAME=$1
fi
# 随机字符串长度 100~200
STRLEN=($RANDOM%100+100)
echo "creating file ${FILENAME}"
echo `randStr $STRLEN` > ${FILENAME}
}
# 清理临时文件 / Clean tmp file
rm -rf ${TMPDIR}/`hostname`
mkdir -pv ${TMPDIR}/`hostname`
# 多线程执行任务 / Multithreading
TMPFIFO="/tmp/$$.fifo"
mkfifo ${TMPFIFO}
exec 6<>${TMPFIFO}
for ((i=0;i<${THNUM};i++));do
echo
done >&6
for ((i=0;i<${JOBNUM};i++)); do
read -u6
{
createFile ${TMPDIR}/`hostname`/${i}.log
} &
echo >&6
done
# 等待所有线程运行完毕 / Wait for job done.
wait
rm -f ${TMPFIFO}
exec 6>&-
echo "Job done!"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment