Всем привет.
Пишу скрипт, суть которого собрать с машин данные, а потом делать с ними что захочу.
В скрипте есть массив с ip адресами машин, я делаю
systems=( ip1 ip2 ip3 )
for system in "${systems[@]}"
do
ssh root@$system multipath -ll > mpath$system
if [[ $? -ne 0 ]]; then
echo "`date` problem with connect to $system"
continue
fi
ssh root@$system virsh list --all > vl$system
done
И в последней комманде последней машины (т.е. до этого везде всё хорошо) получаю ошибку
>script.sh: line 115: unexpected EOF while looking for matching ``'
с дебагом выглядит так:
+ ssh root@ip1 virsh list --all
+ for system in '"${systems[@]}"'
+ ssh root@ip2 multipath -ll
+ [[ 0 -ne 0 ]]
+ ssh root@ip3 virsh list --all
script.sh: line 115: unexpected EOF while looking for matching ``'
Встречался ли кто-то с подобными проблемами, как и почему это происходит, или, хотя-бы, в какую сторону копать?
Заранее благодарен
PS. Англоязычные интернеты полны такими же ошибками, но там везде используется cat EOF; EOF.
PPS. Так же частая проблема - это синтаксис. Я уже сократил цикл до просто двух ssh команд, даже без вывода в файл. Это наталкивает меня на мысли о том, что проблема в массиве. А так же, когда убрал лишнее - изменились цифры в указании строки. Это третья с конца строка скрипта и последняя. Такое впечатление, что где-то вместо того, что бы увидеть конец массива - он пытается получить еще один элемент, а дальше не воспринимает файл. Просто видит весь файл аж до третьей строки с конца.
UPD: я закомментил весь скрипт дальше, просто первый цикл выполняется. Если раскомментить второй - начинается ошибка. Ща буду в него смотреть
UPD2: похоже, проблема в следующем цикле в конструкции
if echo $line | grep -q -E "\([a-z0-9]{33}\)"; then
#statements
continue