我在同一目录中得到两个文件:
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确实存在'
似乎我可以检查数据库是否存在,但无法检查数据库中是否存在该表,我想知道该怎么做?答案 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