2012-02-17 3 views
0

я запустить этот сценарий из командной строки: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
благодаря

+0

попробуйте удалить все пробелы вокруг = и == – hovanessyan

+0

Пожалуйста, не изменяйте свой вопрос итеративно, чтобы первые полезные ответы выглядели глупо. В редких случаях более прозрачно добавлять дополнительную информацию, а также задавать новый вопрос, если у вас есть новый вопрос. Ваш заголовок и теги должны точно отражать вашу проблему, и ответы с одобрением и принятием будут соответствовать вашему вопросу, и вы можете принять только один вопрос. –

ответ

3
if [$exist == 1] ; then 

Из-за причудливого сценария оболочки вам понадобятся пробелы вокруг квадратных скобок. Они не являются обязательными.

if [ $exist == 1 ]; then 

Для чего это стоит, вы могли бы реорганизовать это немного, если вы просто хотите, чтобы проверить наличие одной таблицы, и в других отношениях не нужно $check_databse_exist. Идея заключалась бы в замене цикла for на grep.

if mysql -u root --password=root -Bse 'show databases' | grep -qw test_traffic; then 
    # Database exists. 
fi 

grep -q не производит никакого вывода, он просто возвращает успех или неудачу. grep -w является необязательным, но хорошая практика; он предотвращает сопоставление таблицы, например test_traffic2.

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 
+0

спасибо, что я отредактировал мой основной пост (см. Главный пост), но все равно получите [: 16: jobeet: неожиданный оператор [: 16: jobeet_test: неожиданный оператор [: 16: landpage_db: неожиданный оператор [: 16: my_db: неожиданный оператор [: 16: symfony2: неожиданные ошибки оператора ??? –

+0

Кажется, что у вас все еще есть пробел. Команда test предполагает, что ваши имена в базе данных являются операторами ... – Mithrandir

+0

спасибо, но я выбрал inline, если mysql -u root --password = root -Bse 'show databases' | grep -qw test_traffic; :) –

Смежные вопросы