Bash脚本分配和比较

时间:2012-02-17 13:21:43

标签: bash

我从命令行运行此脚本:

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
感谢

2 个答案:

答案 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