2017-01-09 10 views
1

У меня есть сценарий bash, из которого мне нужно проверить, существует ли таблица hbase и, соответственно, мне нужно распечатать сообщение. Ниже я попытался.Как проверить, существует ли таблица hbase из сценария bash

doesTableExist=$(echo -e "exists '$base_table_name' | hbase shell") 

if [ $? -eq 0 ] 
then 
    echo [BYOA_HIVE_INGEST] [INFO] "Table already exists" 
else 
    echo [BYOA_HIVE_INGEST] [ERROR] "Table does not exist" 
fi 

Ниже приведен пример запуска сценария.

sh test.sh $base_table_name = test 

Но это означает, что таблица существует все время, независимо от того, существует она или нет. Что я здесь делаю неправильно? Любая помощь приветствуется.

ответ

2

Идея права, как вы передаете значение переменной в сценарии не так, это должно было быть,

base_table_name="test" sh test.sh 

Общий синтаксис для установки переменной или переменных, а затем запустить команда что-то вроде

FOO=bar somecommand someargs 

Если код возврата неверно для всех случаев, вы можете попробовать поиск на выходе команды непосредственно, как,

if echo -e "exists '$base_table_name'" | hbase shell 2>&1 | grep -q "does exist" 2>/dev/null 
then 
    echo "[BYOA_HIVE_INGEST] [INFO] Table already exists" 
else 
    echo "[BYOA_HIVE_INGEST] [ERROR] Table does not exist" 
fi 

С флагом -q и stderr перенаправление на NULL, если строка найдена, код возврата grep должен удовлетворять if-clause.

+0

На самом деле переменная устанавливается, как я ее передаю. Я добавил аргумент, передающий логику, чтобы получить имена переменных. Я могу напечатать их также. Его просто, что я не получаю правильный результат для данного имени – mayooran

+0

@mayooran: Проверьте мое обновление, – Inian

+0

@mayooran Я гарантирую, что переменная не получает настройки так, как вы ее передаете. Он может * уже * быть установленным из-за того, что вы делали раньше, но так, как вы описываете его передачу, это не работает *. –