初めての記事ですが、LinuxでのスクリプトでMySQLデータベースのレコードの削除やファイル削除などについて共有したいと思います。
◆まずは、Linuxのコマンドを開きます。
Windowsで利用の方は色んなコマンドツールがあると思いますが、私は下記のツールなどを使っています。
-「Linuxサーバ」PuTTY (https://www.putty.org/)
-「ロカール環境」Git Bash (https://git-scm.com/downloads)
◆下記のコマンドでスクリプトファイルを作成して試してみましょう
$vim file_name.sh
#!/bin/bash
echo hello world
保存して、権限を与える
$chmod +x file_name.sh
下記のコマンドで実行してみると hello worldがアウトプットされました。
$./file_name.sh
では、さっそくMySQLクエリを実行してみましょう
ロカール環境ではMySQLデータベースを接続するためユーザ名やパスワードなどをスクリプトファイルで直接書いても問題ないですが、LinuxサーバではこのようなWranningが出る場合があります。
mysql: [Warning] Using a password on the command line interface can be insecure.
なので、このように設定ファイルを利用した方が安全です。
$vim mysql_access.cnf
[client]
user=user_name
password=password
保存して、権限を与えます。
$chmod 600 mysql_access.cnf
そして、スクリプトでMySQLに接続して、データベースのレコードやファイルなどを削除してみます。リクエストIDの設定や確認メッセージなども含めてやっていきたいと思います。
#!/bin/bash
#MySQL接続
db_name="database_name"
host_name="host_name"
sql_con="mysql --defaults-extra-file=mysql_access.cnf -h $host_name $db_name "
sql_exit="exit;"
#リクエストID設定
read -p "IDを入力してください: " t_id
#確認メッセージ
read -p "データを削除してもよろしいですか?(y/N): " yn
case "$yn" in
[yY]*)
#yes/y の場合DBの存在チェックする
$var1=$($sql_con -se "SELECT id,name,created_date FROM tbl_name WHERE id=$t_id;")
#$var1がNULLかどうかをチェックする「if文には半角スペースは大事です」
if [ -z "$var1" ]; then
echo "データが存在しません";
else
#SQLクエリのアウトプットを変数に割当します
read id name created_date <<< $var1
#データを削除します。
$sql_con -se "DELETE FROM tbl_name WHERE id=$id;"
#ファイルを削除する場合
file_path="/path/to/file/file_name.ext"
#ファイル存在チェック
if [ -e $file_path ]; then
sudo rm -f $file_path;
else
echo "ファイルが見つかりませんでした。";
fi
echo "削除しました。";
fi
;;
*) echo "中止しました。"
;;
esac
#引き続き削除したい場合
read -p "引き続き削除しますか?(y/N)" c_del
case "$c_del" in
[yY]*)
./file_name.sh
;
*)
echo "終了しました。"
;
esac
アウトプット
$ ./file_name.sh
IDを入力してください: 365
データを削除してもよろしいですか? (y/N) : y
削除しました。
引き続き削除しますか?(y/N)y
IDを入力してください: 22
データを削除してもよろしいですか? (y/N) : y
データが存在しません。
引き続き削除しますか?(y/N)n
終了しました。
もしよかったらぜひ試してみてください。