Você está misturando a sintaxe if [...] ... elif [...] ... fi
do shell no código do awk.
o awk usaria
if (...) {
...
} else if (...) {
...
}
neste contexto.
Além disso, você espera que o array do awk apareça no shell pai do awk aqui
echo ${numbers[1]}
echo ${numbers[2]}
Isso não vai acontecer. Você pode escrever strings no awk e analisar que a saída no shell put awk (ou qualquer outro programa) não irá distorcer seu ambiente de chamada.
Onde o erro de sintaxe é indicado é outra mistura:
${numbers[1]}
é uma referência de elemento de matriz bash ... em um código awk (quase tem algum significado para o awk, mas sugiro não forçar isso).
Eu recomendaria descrever o que exatamente é sua tarefa e pedir dicas, porque COMO você deseja resolvê-lo aqui e explicar por que ele não funcionará será um pouco longo. Mas antes de tudo você deve digerir a coisa que shell (e sua linguagem) é uma coisa e awk (e sua linguagem) rodando dentro dela é outra. Eles têm elementos semelhantes, mas isso é apenas similaridade.
Apenas dividir uma string em duas partes, se elas estiverem conectadas através de um único caractere, é muito fácil e não requer awk. cut é o programa básico de divisão.
SOURCE=$(echo $lines | cut -f1 -d=)
colocará o primeiro campo em SOURCE, onde os campos serão separados por = na entrada de cut Ocasionalmente, você pode se deparar com códigos como
SOURCE=$(echo $lines | awk -F= '{print $1}')
que é o mesmo. DEST pode ser atribuído de forma semelhante a ambos os métodos, mas visando o segundo campo.