O problema que você pode estar enfrentando aqui é um dos escopo. Em outras palavras, o valor de uma variável é definido em um determinado ponto em seu script e esse valor de variáveis é retido por toda parte. Mais tarde, você se depara com o problema de que, como a variável está definida (isto é, tem um valor), sua condicional é avaliada como esperado.
Aqui está um exemplo de código para dar um exemplo
foo ()
{
local yn
read -p "Do you want to install this programme? " yn
case $yn in
[Yy]* ) echo $yn;;
[Nn]* ) exit;;
* ) echo "Please answer yes or no. ";;
esac
}
foo
echo $yn
Agora, observe quando você executa esse exemplo de código que quando $ yn é ecoado no escopo de foo () que ele retorna com o que você inseriu, mas fora desse escopo está vazio. Quando declaro a variável local para a função foo (por exemplo, {}), ela é indefinida fora dela. Se você quiser reutilizar nomes de variáveis sem que eles entrem em conflito uns com os outros, é assim que é feito.