シェルスクリプトでのmysqlコマンド実行方法

このQ&Aのポイント
  • シェルスクリプトでMYSQLを使用してデータベースの一覧を取得し、それを順番にテーブル作成する方法について解説します。
  • シェルスクリプト内でのファイルの読み込みや変数の渡し方についても詳しく説明します。
  • また、処理の進捗をログファイルに保存する方法も紹介します。
回答を見る
  • ベストアンサー

シェルスクリプトでのmysqlコマンド実行

いつもお世話になっております。 MYSQLで、データベースの一覧を出力し それを上から順にテーブル作成をしたいと考えています。 source コマンドで、ファイルを読み込んで実行したいのですが、 2つ目のfor文に上手く変数を渡せません。 'source $var_ファイル_$i.sql'` ↑これに変数が上手く渡りません。 そのままの値になってしまいます。 どうにか渡す方法はないでしょうか。 #!bin/bash var=`hostname -a` for i in `mysql -u root -p -e 'show databases'` do for (( cnt = 0; cnt < 11; cnt++ )) do echo $var echo $i `mysql -u root -p $i -e 'source $var_ファイル_$i.sql'` 1>> $var_ファイル_$i.log 2>&1 echo "$cnt 回目の処理" done done exit 0

質問者が選んだベストアンサー

  • ベストアンサー
  • pringlez
  • ベストアンサー率36% (598/1630)
回答No.1

こうしたらどうなりますか。 "source $var_ファイル_$i.sql"

その他の回答 (1)

  • Wr5
  • ベストアンサー率53% (2177/4070)
回答No.2

>'source $var_ファイル_$i.sql'` >↑これに変数が上手く渡りません。 >そのままの値になってしまいます。 >どうにか渡す方法はないでしょうか。 「bash シングルクォート」で検索してみる。 http://www.fireproject.jp/feature/bash/basic/variable.html#1 http://www.oklab.org/program/sh.html#7 「bash 変数 展開」辺りでもなんぞ見つかるんじゃないですかね?

humerace
質問者

お礼

いろいろ調べているうちに、たどり着いた1ぺージでした。 ありがとうございました。

関連するQ&A

  • シェルスクリプトの演算について

    下記のような内容で、list変数の値から抽出してtest{i}変数に入れるようにしています。 ※awkコマンドでのprintの値を for の値にしています。 for i in 0 1 2 do test${i}=`echo ${list} | awk '{ print $'${i}' }'` done この例はうまくいくのですが、 print $'${i}'の部分で${i}の値にプラス2したものを利用したく、 test${i}=`echo ${list} | awk '{ print $'${i+2}' }'` や test${i}=`echo ${list} | awk '{ print $i=`expr ${i} + 2` }'` 等を試しましたがうまくいきません。 どのようにすればよいでしょうか。 よろしくお願い致します。

  • mysqlコマンドのエラー

    mysqlコマンドで、テキストに記述されたcreate文とinsert文を読み込みたいのですが、うまくいきません。下記がコマンドの実行結果です。パスワードつきとそうでないものをテストしましたが、駄目でした。 何かお気づきの点がありましたら、ご教示して頂けますと幸いです。 どうぞ、よろしくお願いいたします。 [root@db1 tmp]# mysql u_ec < u_ec.sql ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: NO) [root@db1 tmp]# mysql -u owner -p u_ec < u_ec.sql Enter password: ERROR 1045 (28000): Access denied for user 'owner'@'localhost' (using password: YES)

    • ベストアンサー
    • MySQL
  • コマンドプロンプト 実行結果の桁をそろえたい

    バッチの実行結果の件数%count%を、5桁の右寄せ(結果が1桁のばあいは、スペース4桁を頭に入れてる)でテキストファイルresult.txt に出力したいのですが、下記のように書くと、 table1 : ("d\n",0) 件  と出力されてしまいます。 table1 :    0 件   と出力されるようにするにはどうしたらよいのでしょうか? for /f %%i in ('mysql -u root -p ^< "c:\bat\test.sql"') do set count=("%5d\n",%%i) echo table1 : %count% 件 >> "c:\bat\result.txt"

    • ベストアンサー
    • MySQL
  • linuxのシェルスクリプト

    linuxのシェルスクリプト シェルスクリプトの質問をどこですればよいのかよくわからないので、ここでさせていただきます。 最近、始めてシェルスクリプトの勉強を始めました。 スクリプトに渡す引数を出力したいと思い、 echo $1 echo $2 echo $3 とかくと、スクリプトに渡した引数が出力されます。 これを、for文で書くと for i in 1 2 3 do echo $i done とねるのですが、これでは1,2,3が出力されてしまいます。 どうなおしたらいいのでしょうか? よろしくお願いいたします。

  • シェルスクリプトとコマンドライン

    iptablesログからSRC=10.10.10.10の通信ログを取得しようとしました。 見よう見まねで下記コマンドラインを作成しました。 【コマンドワンライナー】 for ((i=1;i<9;i++));do da="2013012"$i;logfile=iptables.log-$da.gz ; echo -n $ logfile':';zcat $logfile | grep SRC=10.10.10.10 |wc -l;done 2>/dev/null このとき、所々に「;」を入力しました。 なぜ、;(セミコロン)をそこで入れる必要があったのかが分からないのです。 多分シェルスクリプトで記述した時の 「改行の位置?」ではないかと思っているのですが この認識で間違っていないでしょうか? 【シェル記述 改行の位置で;(セミコロン?)】 #!/bin/sh for ((i=1;i<9;i++))  do da="2013012"$i  logfile=iptables.log-$da.gz  echo -n $logfile':';zcat $logfile | grep SRC=10.10.10.10 |wc -l done 2>/dev/null ご教授お願いします。

  • mysqlでsqlファイルを実行したい

    コマンドプロンプトを起動して、mysqlで、sqlファイルを一括実行したいのですが、次の構文ですと、データベース名を入れなければなりません。データベースの作成もsqlファイルの中に書いてあるので、この段階では、データベースが存在しません。データベース名を入れないでsqlファイルを実行する構文がありましたら教えてください。 mysql -u root -D [dbName] -p < [FileName].sql

    • ベストアンサー
    • MySQL
  • MySQLのデータをシェルの変数に入れる方法

    お世話になります。 ユーザ名とパスワードを入力させるフォームをPHPで作成し、 MySQLのSpoolに書き込むものを作りました。 やりたいことはシェルスクリプト(bash)を用いて、Spoolの データをシェルの変数に入れ、その変数を基にLinuxのユーザを 作成しようと思っています。 以下シェルスクリプトでMySQLのデータを表示することは出来たのですが、 echo 'use test;select * from spool'|mysql -u root -ppassword 表示したデータを変数に入れることが出来ません。 $test='use test;select * from spool'|mysql -u root -ppassword echo $test どのようにしたら上手くできるでしょうか? 皆様のテクニックを御教授下さい。 環境 OS-CentOS4.4 MySQL-4.1.20

  • (MySQLで修正スクリプトがうまくいかず困っています。

    最近MySQLをはじめました、まだ初心者の者です。 MySQLデータベースで、修正用のスクリプトがうまく起動いたしません。自分なりに色々書籍やネット検索致しましたがどこが間違っているのか見出せません。 お手数ですが、どうか指南お願い致します。 リンクから呼び出すスクリプトと削除スクリプトの二点です。 -------------------(始)ここから明細スクリプト(始)--------------- <?php extract($_GET); mysql_connect('localhost','root','xxxx'); mysql_select_db('xxxx'); $sql = "select * from xxxx where id = '{$id}'"; $result = mysql_query($sql); $rows = mysql_num_rows($result); if($rows == 0){ echo "検索データが見つかりませんでした。"; exit; } else { while($row = mysql_fetch_array($result)){ echo "<h2> " , $row["title"] , "</h2>"; echo "<p><font size=\"-2\">#", $row["id"] ," ●",$row["tourokubi"] ,"</font></p>\n"; echo "<p><div class=\"hon\">", nl2br($row["honbun"]), "</div></p>"; echo "<div class=\"key\">keywords: ", nl2br($row["keyword"]), "</div>"; $row["id"]; echo "</p>"; echo "</p>"; echo "<a href=\"correct.php?id="; echo $row["id"]; echo "\">[修正する]</a>"; echo "<a href=\"j_sakujo1.php?id="; echo $row["id"]; echo "\">[削除する]</a><hr>"; } } ?> ------------------------(終)ここまで(終)------------------------ -------------------(始)ここから削除スクリプト(始)--------------- <?php extract($_POST); extract($_GET); mysql_connect('localhost','root','xxxxx'); mysql_select_db('xxxxx'); //修正レコード if($honbun<>""){ $sql = "update xxxxx set title='$title', honbun='$honbun', keyword='$keyword' where id = $id"; mysql_query($sql); echo "レコードの修正が完了しました"; exit; } // 修正ルーチン $sql = "select * from xxxxx where id = $id"; $result = mysql_query($sql); while($row = mysql_fetch_array($result)){ $tourokubi = $row["tourokubi"]; $title = $row["title"]; $honbun = $row["honbun"]; $keyword = $row["keyword"]; } echo "<form action=\"correct.php\" method=\"post\" >\n"; echo "<p>・日付<br>\n"; echo $tourokubi, "</p>\n"; echo "<p>・タイトル<br>\n"; echo "<input type=\"text\" name=\"title\" value=\"",$title, "\"size=60 ></p>\n"; echo "<p>・本文<br>\n"; echo "<textarea name=\"honbun\" rows=20 cols=70 >\n"; echo $honbun; echo "</textarea></p>\n"; echo "<p>・キーワード(スペース区切りで列記)<br>\n"; echo "<textarea name=\"keyword\" rows=2 cols=70 >\n"; echo $keyword; echo "</textarea></p>\n"; echo "<p><input type=\"hidden\" name=\"i\" value=\"", $i, "\">  "; echo "<p><input type=\"submit\" value=\"修正\">  "; echo "<input type=\"reset\" value=\"クリア\"></p>\n"; echo "</form>\n"; ?> -------------------(終)ここまで(終)---------------------- 修正ボタンを押すと、修正しました。と表示されるのですが、 なぜかデータは更新されておりません。 自分なりに調べましたが、原因がどうしても分かりません。 ご指南よろしくお願い致します。

  • シェルスクリプトについて

    bangou.txtには ▲ 123123 123123 100000 ▲ ▲ というように数値が入っています。(▲は空白ですが改行コードがはいってます) この場合、1行目と3行目を比較するスクリプトを作りたいと思って 色々調べて以下のようなスクリプトを作ってみましたけどうまく動きません。 #!/bin/bash for iii in `sed -n '1p' bangou.txt` do jjj=`sed -n '2p' bangou.txt` kkk=`sed -n '3p' bangou.txt` #declare -i $kkk if [ "$kkk" = "$iii" ] then echo "$iii" else echo "$kkk" fi done どこか基本的なところで間違えているのかと思うのですが初心者なので よくわかりません。 わかる方がいらっしゃったら教えていただけないでしょうか。

  • csvファイルからMySQLにシェルで取り込みをしたい

    【環境】LINUX Ferora10 mysql 5.0 インターネット接続できないPC(データはUSBメモリで導入可能) bash/mysql初心者 教えてgooの参考ページ ​​http://oshiete1.goo.ne.jp/kotaeru.php3?q=2219411​​ mysql で db1 というデータベースに、tbl2というテーブルを作成しました。ここにcsvファイルから、データをインサートしたいのですが、うまくいきません。 これはうってみたコマンド #bash torikomi.sh エラーは syntax error near unexpected token '(' insert ~文 とかがでます。 下記にソースを貼るので間違いがあったら、教えていただけないでしょうか? #!/bin/bash set hensu='cat /home/******/data1'; for i in $hensu do set a='echo $i | awk -F, '{print $1}'' set b='echo $i | awk -F, '{print $2}'' set c='echo $i | awk -F, '{print $3}'' mysql --user=root --password=*******    use db1; insert into tbl2(aaa,bbb,ccc)values(a,"b","c"); exit done できれば、バックグラウンドでMySQLを起動して、いちいちログイン/ログアウトを繰り返さず、 インサート文を打てればいいのですが。

    • ベストアンサー
    • MySQL

専門家に質問してみよう