Seu problema é que [ "Yes" ] e [ "No" ] são equivalentes a [ -n "Yes" ] e [ -n "No" ] e, portanto, sempre são avaliados como verdadeiros.
A sintaxe correta seria:
if [ "$th" = "yes" ] || [ "$th" = "Yes" ]; then
...
if [ "$th" = "no" ] || [ "$th" = "No" ]; then
Ou:
if [ "$th" = "yes" -o "$th" = "Yes" ]; then
...
if [ "$th" = "no" -o "$th" = "No" ]; then
Ou, se você estiver usando bash como um interpretador do shell Bourne:
if [ "${th,,}" = "yes" ]; then
...
if [ "${th,,}" = "no" ]; then
( ${th,,} sendo substituído pelo valor minúsculo da variável th )