sh significa "shell" e shell é o antigo interpretador de linha de comando similar ao Unix. Um interpretador é um programa que executa instruções específicas escritas em uma linguagem de programação ou script. Então basicamente você diz "Execute esse arquivo para mim".
Você deve entender que o Linux realmente não olha para a extensão do arquivo para determinar qual é o arquivo (ou programa). Portanto, contanto que o conteúdo desse arquivo seja escrito de uma maneira que o interpretador sh entenda, ele funcionará. Mas apenas por uma questão de legibilidade, esses arquivos normalmente recebem uma extensão .sh e não tenho ideia do que o desenvolvedor estava pensando quando deu a esse arquivo uma extensão .txt.