我从命令行运行此脚本:
check_databse_exist=`mysql -u root --password=root -Bse 'show databases' | egrep -v 'information_schema|mysql'`
for db in $check_databse_exist; do
if [ "$db" == "test_traffic" ] ; then
exist=1
fi
done
if [ $exist -eq 1 ] ; then
#do other stuff
fi
exit 0
为什么要给予:
[: 16: jobeet: unexpected operator
[: 16: jobeet_test: unexpected operator
[: 16: landpage_db: unexpected operator
[: 16: my_db: unexpected operator
[: 16: symfony2: unexpected operator
./cibuild: 24: [0: not found
我只想循环,如果发现设置存在= 1
感谢
答案 0 :(得分:3)
if [$exist == 1] ; then
由于shell脚本怪癖,你需要在方括号周围留出空格。它们不是可选的。
if [ $exist == 1 ]; then
对于它的价值,如果你只想检查一个表是否存在,你可以稍微重构一下,否则不需要$check_databse_exist
。我们的想法是用grep替换for循环。
if mysql -u root --password=root -Bse 'show databases' | grep -qw test_traffic; then
# Database exists.
fi
grep -q
不产生输出,只返回成功或失败。 grep -w
是可选的,但是很好的做法;它可以防止像test_traffic2
这样的表匹配。
答案 1 :(得分:1)
将其更改为:
check_databse_exist=`mysql -u root --password=root -Bse 'show databases' | egrep -v 'information_schema|mysql'`
for db in $check_databse_exist; do
if [ "$db" == "test_traffic" ] ; then
exist=1
fi
done
if [ $exist -eq 1 ] ; then
#do other stuff
fi
exit 0