pick_host é chamado com "$hosts" , ou seja, o conteúdo do arquivo host.txt . Na função, porém, você diz
for host in 'cat $1'
Mas $1 é o primeiro argumento para pick_host , ou seja, "$ hosts". Você está tentando cat nomes de host, não nomes de arquivos.