2013-04-25 381 views
0

如果在執行我的sql crud操作期間出現問題或者無法使用shell腳本進行提交,我試圖進行回滾。如何在shell腳本中獲取sqlite命令的輸出

我有test2.sh和test.sh test.sh:

#!/bin/sh 
sqlite3 dB.sqlite << EOF 
begin; 
select * from Table1; 

和test2.sh

#!/bin/sh 
if echo `./test.sh`|grep -q "SQL error"; then 
    rollback; 
else 
    err=commit; 
    if echo $err |grep -q "error"; then 
    rollback; 
    fi 
fi 

沒有名爲Table 1表中,我期望能獲得SQL錯誤輸出test.sh和回滾。

但它給錯誤:rollback:command not found。 我如何得到錯誤並進行回滾?或者是這樣,我遵循嗎?

回答

1

您的test2.sh腳本失敗,因爲shell正在嘗試執行名爲rollback的程序,因此「未找到命令」。你想使用sqlite的指令回滾,偉馳意味着你必須至少做到這一點:

sqlite3 dB.sqlite << EOF 
rollback; 
EOF 

但我不認爲這會工作。正如我所見,回滾必須在test.sh啓動的sqlite會話中發生,才能起作用。你的test.sh腳本已經讓sqlite犁過這些命令,直到它到達EOF,當你用test2.sh grep錯誤時,它已經太晚了。您無法通過位於sqlite會話之外的test2.sh腳本進行回滾。

因此,爲了完成我的答案,我建議您擺脫Bash腳本並使用編程語言,這將允許您打開sqlite會話,執行命令並控制事務。 Python中的快速示例:

import sqlite3 

conn = sqlite3.connect('dB.sqlite') 

c = conn.cursor() 

try: 
    c.execute('INSERT INTO Table1 VALUES(1)') 
    conn.commit() 
except: 
    conn.rollback() 

c.close() 
+0

感謝您的回覆。 – Brknl 2013-04-26 06:29:54

相關問題