Você poderia simplesmente usar o command -v
para verificar se ele está instalado, o código de retorno na condição if ajudaria você a instalar se o seu não já estivesse instalado
apt-get update
programs=(bc nmap coreutils xmlstarlet)
for program in "${programs[@]}"; do
if ! command -v "$program" > /dev/null 2>&1; then
apt-get install "$program" -y
fi
done
A opção command -v
é compatível com POSIX. Você pode executar apt-get update
apenas uma vez e não para cada iteração do loop. Você também definiu programs
como uma variável que deveria ter sido uma matriz para a iteração.