/
Delete.sh
executable file
·195 lines (190 loc) · 4.67 KB
/
Delete.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
#!/bin/bash
#ファイルが存在するか
File(){
SQLFILE="$1.sql"
if [ -f $SQLFILE ]
then
echo "$SQLFILEに追記していきます"
else
echo "$SQLFILEを新規作成"
fi
}
#ユーザー新規作成・変更
Change(){
local file=".my.cnf"
local username
local password
local hostname
echo "ユーザーを新規作成・変更"
read -p "ユーザー名 : " username </dev/tty
read -s -p "パスワード : " password </dev/tty
echo
read -p "ホスト名 : " hostname </dev/tty
#ファイル内にかきこみ
{ echo "[client]";
echo "user = $username";
echo "password = $password";
echo "host = $hostname";
} > $file
echo "新規作成・変更完了"
}
#ログインユーザー選ぶ
Account(){
local file=".my.cnf"
local login_user
if [ ! -e $file ]
then
Change
fi
echo "/* ログインユーザー */"
cat $file | grep 'user = ' | awk '{print $3}'
read -p"ユーザー名を指定[変更:change] : " login_user </dev/tty
if [ "$login_user" = "change" ]
then
Change
Account
else
USER="$login_user"
fi
}
#MYSQL接続テスト
Connect(){
local file=".my.cnf"
local ret
ret=`mysql --defaults-extra-file=./$file -u $USER -e"select user();"`
if [ $? -eq 1 ]
then
echo "MYSQLに接続できませんでした。"
exit 1
else
echo "MYSQLに接続できました"
local user_list=`echo $ret | awk '{ print $2; }'`
echo "$user_listでログインしました"
fi
}
#所有のDBを返す
Show_DB(){
local file=".my.cnf"
local ret
ret=`mysql --defaults-extra-file=./$file -u $USER -e "show databases;"`
if [ $? -gt 0 ]
then
exit 0
fi
echo "/* データベース一覧 */"
ARRAY=($ret)
Show_array
}
#所有のテーブルを配列に格納しShow_arrayを呼ぶ(引数:データベース名)
Show_Table(){
local file=".my.cnf"
local ret
ret=`mysql --defaults-extra-file=./$file -u $USER -e "use $1;show tables;"`
if [ $? -gt 0 ]
then
echo "存在しないデータベース名です"
echo "最初からやり直してください"
exit 1
fi
ARRAY=($ret)
echo "/* $1内のテーブル一覧 */"
Show_array
}
#テーブルデータを返す(引数:データベース名 テーブル名)
Show_TableData(){
local file=".my.cnf"
local ret
ret=`mysql --defaults-extra-file=./$file -u $USER -e "use $1;SHOW COLUMNS FROM $2"`
if [ $? -gt 0 ]
then
echo "存在しないテーブル名です"
echo "最初からやり直してください"
exit 1
fi
echo "/* $2テーブルデータ一覧 */"
mysql --defaults-extra-file=./$file -u $USER -e "use $1;SELECT * FROM $2"
}
#配列の中身を縦に表示
Show_array(){
local e
unset ARRAY[0]
for e in "${ARRAY[@]}"
do
echo "*** ${e}"
done
}
#削除条件情報を配列に格納(引数:データベース名,テーブル名)
Target_inf(){
echo "/* WHERE内容作成 */"
local delete_colum
local delete_data
read -p "削除条件項目名[exit:q] : " delete_colum
#qの場合終了
while [ "$delete_colum" != "q" ]
do
Check_colum $1 $2 $delete_colum
read -p "削除条件項目内容 : " delete_data
#削除条件項目名と内容を配列に追加
ARRAY4+=("$delete_colum")
ARRAY4+=("$delete_data")
read -p "削除条件項目名[exit:q] : " delete_colum
done
#ARRAY4が空の場合終了
if [ ${#ARRAY4[@]} -eq 0 ]
then
echo "全項目内容を削除します"
fi
}
#存在する項目名かチェック(引数:データベース名,テーブル名,項目名)
Check_colum(){
local ret
local file=".my.cnf"
ret=`mysql --defaults-extra-file=./$file -u $USER -e "use $1;select $3 FROM $2;"`
if [ $? -gt 0 ]
then
echo "存在しない項目名です"
echo "最初からやり直してください"
exit 1
fi
}
#削除対象情報を入力(引数:データベース名,テーブル名,SQLFILE名)
Create_sql(){
local e
local targ_sql
local data_sql
local i=0
#WHERE
for e in "${ARRAY4[@]}"
do
if [ $i -eq 0 ]
then
targ_sql=" WHERE ${ARRAY4[i]} = \"${ARRAY4[i+1]}\""
else
targ_sql="$targ_sql AND ${ARRAY4[i]} = \"${ARRAY4[i+1]}\""
fi
i=$(( $i + 2 ))
#配列要素最大か
if [ $i -eq ${#ARRAY4[@]} ]
then
break
fi
done
{ echo "use $1;"
echo "DELETE FROM $2$targ_sql;"
} >> $3
}
echo "SQLファイルを新規作成(DELETE)"
read -p "ファイル名を入力 : " SQLFILE </dev/tty
File $SQLFILE
Account
Connect
Show_DB
read -p "データベース名を入力:" Show_DB </dev/tty
Show_Table $Show_DB
read -p "テーブル名を入力 : " Show_Table </dev/tty
Show_TableData $Show_DB $Show_Table
Target_inf $Show_DB $Show_Table
Create_sql $Show_DB $Show_Table $SQLFILE
echo "-------------------"
echo "ファイル名:$SQLFILE"
cat $SQLFILE