bash скрипт не вставляет mysql с целым числом - PullRequest
2 голосов
/ 31 марта 2020

Уважаемые, у меня есть этот маленький скрипт:
Это чтение информации о весе (pes в моем локальном) из шкалы от порта USB, которая мне нужна на mysql сервере
1-я часть работает хорошо, она дает мне вес в / tmp / ultimpes без осложнений, ну, мне нужно сделать несколько хаков для этого дерьма работает ... но работает.

#!/bin/bash
source /home/bin/claus.sh #contain variables $mysqluser mypass master(mysql host)  idbascula (scale id) 
screen -S pesa -X quit >> /dev/null
screen -S pesa -dm bash -c "grabserial -d /dev/ttyACM0 -e 1 -o /tmp/ultimpes -Q"
sleep 0.1
echo -en '\x05' >/dev/ttyACM0
sleep 0.1
if [ -s /tmp/ultimpes ] #if i have data i use it, otherwise recursive call. scale dont send data if weight is not stable 
then
    pes=$(cat /tmp/ultimpes |cut -d `echo -e '\x0D'`  -f 1 |cut -d ' ' -f 2 |sed 's/^0*//' )
    qdel="delete from ultimpes where ID=$idbascula;"
    #q="INSERT INTO \`ultimpes\` (\`pes\`,\`ID\`) VALUES ('$pes','$idbascula');"#i try other modifications and save this for memory
    q="
    insert into ultimpes 
    (ID,pes) 
    Values(  '$idbascula' , '$pes' );" 
    echo $pes >/tmp/pes
    echo $qdel 
    echo $q
    mysql -u$mysqluser -p$mypass -h$master Preus -e "$qdel"
    mysql -u$mysqluser -p$mypass -h$master Preus -e "$q "
else 
    /home/bin/pesa
fi

Таблица - это таблица памяти, в которой они имеют только последний вес, поэтому я могу каждый раз удалять записи. mysql удаление работает хорошо.
mysql вставка не работает внутри скрипта, но она работает, если я набираю в чистом терминале всю строку, записывая:

mysql -uuser -psecret -hhost Preus -e "insert into ultimpes (ID,pes) Values('1' ,'90' );"

Таблица была создана с :

CREATE TABLE ultimpes (
  ID tinyint unsigned NOT NULL,
  pes int unsigned NOT NULL
) ENGINE='MEMORY';

Есть ли у вас какие-либо соображения относительно записи данных в mysql из сценария bash? В последний раз я делал это в начале 2000-х годов, и мне это удалось.
Я пытаюсь поставить значения без кавычек, но говорю ту же ошибку

insert into ultimpes (ID,pes) Values( 1 , '54' ); #or values ('1'. '54')
ERROR 1265 (01000) at line 2: Data truncated for column 'pes' at row 1

Но если я обрежу кавычки из pes, это изменит ошибку для этого

insert into ultimpes (ID,pes) Values( 1 ,54 );
ERROR 1064 (42000) at line 2: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ' )' at line 3

1 Ответ

0 голосов
/ 31 марта 2020

В моем / tmp / ultimpreu нет данных от масштаба
Я изменяю срез для фильтра
Поэтому я изменяю:

pes=$(cat /tmp/ultimpes |cut -d `echo -e '\x0D'`  -f 1 |cut -d ' ' -f 2 |sed 's/^0*//' )  

для

pes=$(cat /tmp/ultimpes |cut -b 2-6 )

но, возможно, добавив

  pes=${pes//[^[:ascii]]/} can result a more standar filter 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...