MySQL SQLでshellファイルを作成してしまう技!
とあるテーブルの内容を元にして、SQLで、shellファイルをつくって実行しちゃおうってのを無理やりつくってみました。
テーブル定義
CREATE TABLE `files` ( `id` int(11) NOT NULL DEFAULT '0', `file_name` varchar(100) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8 ;
primary keyはidで、urlは、例えば、"abcdefg.jpg"ってのが入っていたとします。内容的にはこんな感じです
mysql> SELECT * FROM files LIMIT 3; +----+-----------+ | id | file_name | +----+-----------+ | 1 | a.jpg | | 2 | b.jpg | | 3 | c.jpg | +----+-----------+
今回、このfile_nameの中にあるファイル名を利用して、
#!/bin/bash wget http://test.test.local/download/a.jpg ・ ・ exit 0
というようなshellファイルを作成してみたいと思います
SQLとヒアドキュメントを駆使する
bashヒアドキュメントについては、ここで書きましたので、詳細はこちらを確認くださいませ
wget_create.sh
wget_create.sh なるものを作成しました。
#!/bin/bash _BASH_FILE="/tmp/bash_sample.sh" _MYSQL="mysql -N -h localhost -umysqluser -ppassword -Dsample" echo "#!/bin/bash" > ${_BASH_FILE} ${_MYSQL} << 'EOT' >> ${_BASH_FILE} SELECT CONCAT('http://test.test.local/download/',file_name) AS wget_string FROM files \G EOT echo "exit 0" >> ${_BASH_FILE} sed -i '/^\*\*\*/d' ${_BASH_FILE} chmod 775 ${_BASH_FILE} bash ${_BASH_FILE} exit 0
ポイントは、CONCATを利用して文字列結合している部分と、
ここでSQLの結果のみファイル出力していることです
${_MYSQL} << 'EOT' >> ${_BASH_FILE}