Редактировать: Для тех, кто найдет это в будущем. Фактическая причина проблемы заключалась в использовании http
вместо https
.
Вы используете неверные кавычки.
Переменные внутри '...'
расширяться не будут. Тем не менее, они будут расширяться почти везде, как в двойных кавычках. Например, эта строка:
echo "index "$index" has a doc count of "$docs
Здесь вторая двойная кавычка завершает первую. Они не могут быть вложенными. Вы могли бы просто написать это как:
echo "index $index has a doc count of $docs"
Таким образом, это означает, что ваши переменные не будут расширяться здесь:
....GET '$ip/$index/_stats'....
Это эквивалентно фактической отправке литеральной строки $ip/$index/_stats
,Вы хотите использовать двойные кавычки здесь: ....GET "$ip/$index/_stats"....
.
Еще одна вещь, на которую следует обратить внимание, это процитировать результат присваивания переменной. Если по какой-либо причине результат этой команды:
curl -k -u $user:$pass -HContent-Type:application/json -X GET '$ip/$index/_stats' | jq '._all.primaries.docs.count'
был foo bar
, то присвоение переменной превращается в docs=foo bar
. Это то же самое, что сказать установить переменную docs=foo
и выполнить программу bar
. Таким образом, вы должны процитировать все назначение. Однако взгляните на это с помощью цитируемого задания:
docs="`curl -k -u $user:$pass -HContent-Type:application/json -X GET "$ip/$index/_stats" | jq '._all.primaries.docs.count'`"
Это начинает выглядеть довольно уродливо и запутанно. Это одна из причин, почему рекомендуется использовать синтаксис $(...)
над обратными галочками. Они функционально эквивалентны, но здесь легче прочитать, что происходит:
docs="$(curl -k -u $user:$pass -HContent-Type:application/json -X GET "$ip/$index/_stats" | jq '._all.primaries.docs.count')"
Итак, я немного коснулся, но это важная вещь. В действительности, это решение, которое вы попробовали, должно было сработать: ....GET "${ip}/${index}/_stats"....
. Я думаю, что ваша проблема на самом деле может быть больше связана с тем, что она есть в сценарии, поскольку она отлично работала за ее пределами. Я не вижу линии Шебанга, и вы, возможно, даже не используете Bash. Вы используете некоторые функции (например, массив), специфичные для bash. Попробуйте добавить #!/bin/bash
в начало скрипта. Если это не работает, попробуйте запустить ваш скрипт следующим образом: bash -x reindex.sh
. Это похоже на режим отладки для bash, и он покажет вам интерпретируемые команды, которые выполняются.