Skip to content

Instantly share code, notes, and snippets.

@yujiod
Created December 23, 2014 23:12
Show Gist options
  • Save yujiod/857a07a8059085e3e512 to your computer and use it in GitHub Desktop.
Save yujiod/857a07a8059085e3e512 to your computer and use it in GitHub Desktop.
ダミーデータを挿入するシェルスクリプト
#!/bin/sh
# MySQLの接続先
MYSQL_ID='root'
MYSQL_HOST='localhost'
MYSQL_SCHEMA='redmine'
# ユーザーのテーブル定義
TABLE_USER_FROM='users'
TABLE_USER_FROM_ID='id'
# 元とするテーブル定義
TABLE_FROM='users'
TABLE_FROM_ID='id'
# 格納先のテーブル
TABLE_TO='diary_comments'
# ユーザーのIDの最大値を得る
USER_MAX_ID=`mysql $MYSQL_SCHEMA -N -u$MYSQL_ID -p -e "select max($TABLE_USER_FROM_ID) from $TABLE_USER_FROM\G"|tail -n 1`
# 元とするテーブルのIDの最大値を得る
MAX_ID=`mysql $MYSQL_SCHEMA -N -u$MYSQL_ID -p -e "select max($TABLE_FROM_ID) from $TABLE_FROM\G"|tail -n 1`
# SQL文
SQL="insert into $TABLE_TO values "
# ランダムな文章を生成する元の文字列
LOREM_IPSUM="Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum."
# IDの最大値でループ
for i in `seq 1 $MAX_ID` ; do
# 内容を挿入するランダムな回数でループ
RAND=`expr $RANDOM % 20`
# 回数が0の場合はcontinue
if [ "$RAND" == "0" ] ; then
continue
fi
for j in `seq 0 $RAND` ; do
# 作成者のID
AUTHOR=`expr $RANDOM % $USER_MAX_ID + 1`
# ランダムな短い文字列を生成
SHORT_STRING=''
for k in `seq 1 10` ; do
RAND=`expr $RANDOM % 69 + 1`
WORD=`echo $LOREM_IPSUM | cut -d " " -f $RAND`
SHORT_STRING="$SHORT_STRING $WORD"
done
# 行頭のホワイトスペースを除去
SHORT_STRING=`echo $SHORT_STRING | sed -e 's/^ +//'`
# ランダムな長い文字列を生成
LONG_STRING=''
for k in `seq 1 30` ; do
RAND=`expr $RANDOM % 69 + 1`
WORD=`echo $LOREM_IPSUM | cut -d " " -f $RAND`
LONG_STRING="$LONG_STRING $WORD"
done
# 行頭のホワイトスペースを除去
LONG_STRING=`echo $LONG_STRING | sed -e 's/^ +//'`
# INSERTする値を追加、カラムに変更がある場合は追加する
SQL="$SQL ($i, '$SHORT_STRING', '$LONG_STRING', $AUTHOR),"
done
done
# 最後のカンマをセミコロンに置換しSQL文として出力
echo $SQL | sed -e "s/,$/;/"
#!/bin/sh
# MySQLの接続先
MYSQL_ID='root'
MYSQL_HOST='localhost'
MYSQL_SCHEMA='redmine'
# 元とするテーブル定義
TABLE_FROM='users'
TABLE_FROM_ID='id'
# 格納先のテーブル
TABLE_TO='user_relations'
# IDの最大値を得る
MAX_ID=`mysql $MYSQL_SCHEMA -N -u$MYSQL_ID -p -e "select max($TABLE_FROM_ID) from $TABLE_FROM\G"|tail -n 1`
# SQL文
SQL="insert into $TABLE_TO values "
# IDの最大値で入れ子ループ
for i in `seq 1 $MAX_ID` ; do
for j in `seq 1 $MAX_ID` ; do
# IDが自分自身の場合はcontinue
if [ "$i" == "$j" ] ; then
continue
fi
# 友達としない場合はcontinue
IS_FRIEND=`expr $RANDOM % 3 - 1`
if [ "$IS_FRIEND" == "-1" ] ; then
continue
fi
# INSERTする値を追加、カラムに変更がある場合は追加する
SQL="$SQL ($i, $j, $IS_FRIEND),"
done
done
# 最後のカンマをセミコロンに置換しSQL文として出力
echo $SQL | sed -e "s/,$/;/"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment