2013-01-15 112 views
2

我寫了一個bash腳本來向sqlite數據庫插入值。該命令如下直到f1變量包含一個單引號在shell變量中轉義單引號

# e.g f1="I'm just kidding" 
# the command reported error 
Error: near "m": syntax error 

五月有人請告訴我如何才能逃脫變量中的單引號

sqlite3 ${db_name} "insert into ${table_name} (${column1},${column2}) values ('$f1','$f2');" 

此命令工作正常? 任何建議表示讚賞。謝謝!

+1

你是知道的[SQL注入]的可能性(HTTP:// EN .wikipedia.org/wiki/SQL_injection)在這個腳本中..是嗎? – Oren

+0

我的建議?使用編程語言。 –

+0

嗨@Oren,其實我不擅長SQL,我只是讓腳本自動地通過條目添加條目到db –

回答

3

逃避SQL單引號,你加倍(https://www.sqlite.org/faq.html#q14):

$ f1="I'm just kidding" 
$ echo "${f1//\'/''}" 
I''m just kidding 
$ f2="no single quotes" 
$ echo "${f2//\'/''}" 
no single quotes 

所以

sqlite3 ${db_name} "insert into ${table_name} (${column1},${column2}) values ('${f1//\'/''}','${f2//\'/''}');" 
0

你可以使用\

f1="I\'m just kidding" 
+0

嗨JoaoBiriba,'f1'變量是從文件中讀取的,所以它可以是任意字符串。我們是否應該在執行腳本之前預處理文件? –

+0

所以你可以使用sed預處理你的文件,例如:sed's// /' – JoaoBiriba

4

從bash,那麼你可以使用$ {VARNAME // X/Y}與在varname的變量y替換x的所有實例。

sqlite3 ${db_name} "insert into ${table_name} (${column1},${column2}) values ('${f1//\'/\'}','${f2//\'/\'}');" 

將「與\」替換任何雖然@ ignacioVazquez - 艾布拉姆斯有最好的答案,因爲PHP Perl的蟒蛇都模塊來幫助淨化輸入。

+0

嗨@peteches,謝謝你的回答。它返回「壞代換」 –

+1

是啊對不起,衝了一下,並把錯誤的地方逃避反斜槓。現在編輯,所以應該工作。如果不是你的bash版本可能不支持替換,就不會記得它所在的版本 – peteches