остановить/перезапустить фоновое задание, запущенное cron

Основная проблема заключается в том, что вы используете три одинарных -кавычки до и после каждой переменной вместо одной. Это не обязательно -на самом деле, это не сработает.

Вы получаете сообщение об ошибке с IP-адресом $downlocalip, потому что он фактически не заключен в кавычки, поэтому sqlite3 пытается интерпретировать его как число с плавающей запятой, а не как текстовую строку... а числа с плавающей запятой не имеют двух десятичных знаков точки в них.

Еще одна незначительная проблема заключается в том, что вы заключаете в одиночные -кавычки значения для целочисленных полей(downspeedиupspeed).

Попробуйте вместо этого:

sqlite3 /var/www/server/newserverstats.db "UPDATE stats SET downspeed=$DN,
   upspeed=$UP, downlocalip='$downlocalip', downremoteip='$downremoteip',
   uplocalip='$uplocalip', upremoteip='$upremoteip' WHERE primkey=1;"

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

Или используйте heredoc, поскольку в ответе Кусалананды -он более удобочитаем.

Кстати, если вы выполняете МНОЖЕСТВО операций sqlite, лучше написать сценарий на языке, в котором есть библиотечный модуль sqlite, поддерживающий значения-заполнители. например. и perl, и pythonимеют отличные библиотеки для работы с sqlite3 и другими базами данных SQL. Обычно вы можете писать код с использованием этих библиотек, так что они требуют мало, если таковые вообще имеются,изменения для работы с другими базами данных, такими как postgresql или mysql.

0
14.11.2019, 11:42
0 ответов

Теги

Похожие вопросы