ВВОД ПЕРЕМЕННОЙ BASH ПОСЛЕ ПРЕДЛОЖЕНИЯ SQLITE3 LIKE

#bash #sqlite #if-statement #variables #clause

#bash #sqlite #if-оператор #переменные #предложение

Вопрос:

У меня есть вопрос о команде sqlite3, которую я пытаюсь вставить в свой скрипт

if [[ -n $(tail -z 600 /var/log/pihole.log | grep "$IP" | wc -c) ]];then

sudo -u pihole sqlite3 /etc/pihole/pihole-FTL.db 'DELETE FROM network WHERE hwaddr LIKE "$MAC"'

fi

Но вскоре я запускаю свою программу, она на самом деле не делает то, для чего она была создана!

Я уже пытаюсь использовать реальный mac-адрес вместо переменной $MAC, и это работает!

Итак, мой вопрос в том, как я могу на самом деле присоединить переменную в этой конкретной команде bash и в моем скрипте!

Заранее спасибо, очень признателен!

Комментарии:

1. Строки в sql должны содержать одинарные кавычки, а не двойные кавычки. Последнее используется для цитирования идентификаторов, таких как имена таблиц и столбцов. (sqlite иногда принимает их, но это ненадежно, поскольку поведение может варьироваться в зависимости от того, как оно было построено и каково содержимое строки).

2. Да, Леонардо подтвердил то, что ты говоришь! Большое вам спасибо , ребята !

Ответ №1:

Ваша проблема здесь заключается в использовании одинарных кавычек: в bash переменные не раскрываются в одинарных кавычках. Вы можете решить эту проблему, либо используя двойные кавычки, либо смешивая одинарные и двойные кавычки (убедитесь, что переменная, которую вы хотите расширить, находится в двойных кавычках):

 $ MAC=1111
$ echo "DELETE FROM network WHERE hwaddr LIKE "$MAC""
DELETE FROM network WHERE hwaddr LIKE "1111"
$ echo 'DELETE FROM network WHERE hwaddr LIKE '""$MAC""
DELETE FROM network WHERE hwaddr LIKE "1111"