2016-11-15 62 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"