#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"