質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

sh

shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

Q&A

解決済

1回答

1252閲覧

シェルスクリプトファイルを使ってMySQLにデータを挿入をするところでつまづいています。。。

Thank_you

総合スコア8

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

sh

shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

0グッド

0クリップ

投稿2020/09/06 21:21

編集2020/09/06 22:23

ご覧いただきありがとうございます。
今回、ターミナルからシェルスクリプトファイル(.sh)を使って、通信速度を一定時間毎に測定するプログラムを作り、測定したデータをファイル内からMySQLにアクセスしてデータベースに保存しようと考えております。

動作の大まかな流れは
12回測定(while)する中で
通信速度の測定 7行目

時間の取得 10行目

通信速度と時間をエクセルファイルへ送信 12行目

コマンドプロントにも通信速度と時刻を表示 15行目以降

取得したデータと時間をmySQLのinsert文でデータベースへ挿入(ここで詰まっています) 23行目

取得したデータは上り、下り等の項目毎のカラムに分ける為、8行目で配列構造?にしています。
($LIST[0],$LIST[1]など)

以下コードになります。

sh

1#! /bin/bash 2 3count=0 4while ((count < 12)) 5do 6 #コマンド実行結果の改行コードを,に置換(エクセルでこれが次のマスへの改行になっている)して数字以外の文字も除外している 7 DATA=`speedtest-cli --simple | tr '\n' ',' | tr -cd '0123456789.,'` 8 LIST=(${DATA//,/ }) 9 #実行時刻を取得 10 TIME=`date '+%Y/ %m/%d%T'` 11 #結果をresult.csvファイルに出力 12 echo $TIME','$DATA >> result.csv 13 14 #コマンドに時刻・測定結果表示・試行回数を表示 15 echo $TIME 16 echo $DATA 17 echo $count 18 19 #DBへ送信 20 #実行時刻を再取得(DB用に変換) 21 TIME=`date '+%Y/%m/%d%T' | tr -cd '0123456789.,'` 22 23 mysql -u user -ppass dbname -e ”insert into Tablename(Day,Ping,Download,Upload)values(${TIME},${LIST[0]},${LIST[1]},${LIST[2]});” 24 25 count=$((count + 1)) 26 sleep 10 ; 27done

以下エラーメッセージ

sh

1./test1-2.sh: line 23: syntax error near unexpected token `(' 2./test1-2.sh: line 23: ` mysql -u user -ppass dbname -e ”insert into Tablename(Day,Ping,Download,Upload)values(${TIME},${LIST[0]},${LIST[1]},${LIST[2]});”'

sh

1show create table Tablename; 2+-----------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 3| Table | Create Table | 4+-----------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 5| Tablename | CREATE TABLE `Tablename` ( 6 `id` mediumint(9) NOT NULL AUTO_INCREMENT, 7 `Day` datetime DEFAULT NULL, 8 `Ping` double(6,3) DEFAULT NULL, 9 `Download` double(5,2) DEFAULT NULL, 10 `Upload` double(5,2) DEFAULT NULL, 11 PRIMARY KEY (`id`) 12) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8 | 13+-----------------+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 141 row in set (0.01 sec)

こちらが挿入先のデータベースの構成になります。

|列1|列2|列3|
| Field | Type | Null | Key | Default | Extra |
+----------+--------------+------+-----+---------+----------------+
| id | mediumint(9) | NO | PRI | NULL | auto_increment |
| Day | datetime | YES | | NULL | |
| Ping | double(6,3) | YES | | NULL | |
| Download | double(5,2) | YES | | NULL | |
| Upload | double(5,2) | YES | | NULL |

クォーテーションの記入漏れだと思いつくまではいいのですが、ネット記事を探しても自力ではどこにつけたらいいのか見つけることができませんでした。

知識不足でご不便、お手数おかけしますが、ご指摘いただけると幸いです。
よろしくお願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takasima20

2020/09/06 21:28

0 の右に ] 足りなくない?
Thank_you

2020/09/06 21:38

takasima20 様 ご連絡ありがとうございます! ご指摘大変ありがとうございました。 修正しましたが、エラーは変わらずでした...見直しが甘く申し訳ありません。
Thank_you

2020/09/06 21:45

Orlofsky 様 ご連絡ありがとうございます! ご不便かけしました。 修正いたしましたのでご確認いただければ幸いです。 また何かあればご連絡ください。
Thank_you

2020/09/06 22:25

Orlofsky 様 再度ご指摘くださりありがとうございます。 こちらで間違い無いでしょうか。 ご確認お願いいたします。 よろしくお願いいたします。
takasima20

2020/09/06 22:30

これダブルクオートが全角じゃね?
Thank_you

2020/09/06 22:54 編集

takasima20 様 ご指摘ありがとうございます。 こちら確認したところ全角でした..."”。 半角のダブルクオートに直したところ、うまくいかず、シングルクオートで試してみたところ違うエラーが出たものの先ほどの問題は解決したように見えます。 ご指摘本当にありがとうございました! 良ければ回答にさせていただきたいのでこちら回答に記入お願いできますでしょうか。 よろしくお願いいたします。
Thank_you

2020/09/06 22:56

Orlofsky 様も使い方からご指摘いただきありがとうございました。 次回以降は細かなミスも意識して、使い方もご不便おかけしないよう利用していきたいと思います。 お力添えいただき本当にありがとうございました。
m.ts10806

2020/09/06 23:31

解決したのでしたらベストアンサーを選び「解決済み」にしてください。
guest

回答1

0

ベストアンサー

では、こちらに…

根本原因はダブルクオートが全角だったためですね。
あとは、変数をうまくつかってあげればok

mysql -u user -ppass dbname -e ”insert into Tablename(Day,Ping,Download,Upload)values("${TIME}","${LIST[0]}","${LIST[1]}","${LIST[2]}");”

例えばこんな感じで変数をクオートの外に出すこともできます。

投稿2020/09/06 23:22

takasima20

総合スコア7464

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

takasima20

2020/09/06 23:24

あ、12行目でも使ってましたね。(汗
Thank_you

2020/09/06 23:37

わざわざクォートの例も出してくださりありがとうございます! お世話になりました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問