Oui, il faut un point virgule avant un "fi" qui n'est pas seul sur une ligne.
Par exemple, il en faut aux lignes 26 et 27, mais c'est inutile à la ligne 22, car le retour à la ligne permet la séparation. Sinon, l'interpreteur de commande croit que le "mkdir" de la ligne 26 prend "fi" comme deuxième paramètre, et il ne voit pas le "fi" correspondant au "if".