【发布时间】:2016-11-15 13:48:11
【问题描述】:
我有一个这样的 bash 脚本:
#!/bin/bash
pavadinimas=$1
pavadinimas2=${pavadinimas::-4}
echo "#!/bin/sh
mysql -uUSER -pPASSWORD -DDatabase -e 'UPDATE boom SET count = count + 1 WHERE Failo_vardas="$pavadinimas"';
vlc -f --play-and-exit /var/www/html/uploads/$pavadinimas" > /var/www/html/script/"$pavadinimas2.sh"
我对这一行有疑问:
mysql -uUSER -pPASSWORD -DDatabase -e 'UPDATE boom SET count = count + 1 WHERE Failo_vardas="$pavadinimas"';
如您所见,我想将变量添加到引号中,但是没有它就出来了。我尝试了很多组合来解决这个问题,但我失败了。经验不足:/
脚本结果:
#!/bin/sh
mysql -uUSER -pPASSWORD -DDatabase -e 'UPDATE boom SET count = parodymai + 1 WHERE Failo_vardas=name.mp4';
vlc -f --play-and-exit /var/www/html/uploads/gaidys.mp4
我想用这样的引号来回显变量:
mysql -uUSER -pPASSWORD -DDatabase -e 'UPDATE boom SET count = count + 1 WHERE Failo_vardas="name.mp4"';
【问题讨论】:
-
转义要使用的引号,例如
WHERE Failo_vardas=\"$pavadinimas\". -
@Gavin 该死的,我忘记了“\”字符......非常感谢!您可以将此添加为答案,以便我接受吗?
-
您的脚本易受 SQL 注入攻击。
-
@Chepner 有什么建议如何保护它吗?我对这些东西很陌生,只是为自己制作一个项目,用于学习目的。提前致谢!
-
不要将
bash用于此类项目。使用具有允许参数化查询的适当 SQL 库的语言,而不是使用字符串操作动态构造 SQL 命令。
标签: bash