如何检查bash文件中是否存在sqlite表?

时间:2013-08-27 16:37:13

标签: bash sqlite

我在同一目录中得到两个文件:

foo.db
check.sh

在数据库foo.db中,有一个名为foo.db.1的表,在check.sh中,我想检查表是否存在:

#!/bin/sh
if ![ -e foo.db.1 ]; then
    echo "foo.db.1 does not exist"
    exit 1
fi

然后我得到了一个打印来说foo.db.1 does not exist。该脚本似乎不起作用,但是如果我更改脚本以检查数据库是否存在而不是表存在,那么它似乎有效:

#!/bin/sh
if ![ -e foo.db ]; then
    echo "foo.db does not exist"
    exit 1
fi
echo "foo.db does exist"

然后我得到印刷品说'foo.db确实存在'

似乎我可以检查数据库是否存在,但无法检查数据库中是否存在该表,我想知道该怎么做?

3 个答案:

答案 0 :(得分:2)

sqlite3 /database/path "SELECT EXISTS (SELECT * FROM sqlite_master WHERE type='table' AND name='<tableName>');"
如果表不存在,

将返回0,如果表存在,则返回1

答案 1 :(得分:1)

您需要使用sqlite3程序来读取sqlite3 db

if sqlite3 ./foo.db <<< .schema | grep -qi 'create table foo.db.1 '; then
    echo "table foo.db.1 exists in foo.db"
fi

答案 2 :(得分:0)

使用双括号或放置!外:

if [[ ! -e foo.db.1 ]]; then
    echo "foo.db.1 does not exist"
    exit 1
fi

if ! [ -e foo.db.1 ]; then
    echo "foo.db.1 does not exist"
    exit 1
fi