2016-11-15 24 views
0

我有一个bash脚本是这样的:呼应变量导致报价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"'; 
+1

逃生要使用如引号'WHERE Failo_vardas = \ “$ pavadinimas \”'。 – Gavin

+1

@Gavin该死的,我忘了“\”字符....太感谢你了!你可以添加这个答案,所以我可以接受它? – semkius

+0

您的脚本容易受到SQL注入攻击。 – chepner

回答

1

你真的很接近。你只需要跳过你想使用的引号。 例如WHERE Failo_vardas=\"$pavadinimas\"

1

你必须放弃单一或引用您的变量将不会被评估。

所以插入一个单引号双引号后,把你的变数来评估,而你的变量之后再插入一个报价。单引号结束的地方,你的env。变量将被评估而不是被字面上的处理。

演示:

$ pavadinimas=name.mp4 

$ echo 'UPDATE boom SET count = count + 1 WHERE Failo_vardas="'$pavadinimas'"'; 

结果:

UPDATE boom SET count = count + 1 WHERE Failo_vardas="name.mp4"