如何在shell脚本中输出sqlite命令

时间:2013-04-25 11:59:40

标签: shell sqlite

如果在执行sql crud操作期间出现问题或者无法使用shell脚本进行提交,我试图进行回滚。

我有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

没有名为Table1的表,我希望得到test.sh和rollback的sql错误输出。

但是它给出了错误:rollback:找不到命令。 我怎样才能得到错误并进行回滚?或者这是我遵循的方式吗?

1 个答案:

答案 0 :(得分:1)

您的test2.sh脚本失败,因为shell正在尝试执行名为rollback的程序,因此“找不到命令”。你想使用 sqlite指令回滚,这意味着你至少要做到这一点:

sqlite3 dB.sqlite << EOF
rollback;
EOF

但我认为这不会起作用。正如我所看到的,回滚必须发生在与test.sh启动的sqlite会话相同的sqlite会话中才能产生任何效果。你的test.sh脚本已经使sqlite通过命令直到它达到EOF,当你用test2.sh grep错误时,它已经太晚了。你无法从test2.sh脚本进行回滚,该脚本位于sqlite会话之外。

因此,为了完成我的回答,我建议您远离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()