Acho que você está procurando por isso:
#!/bin/bash
clear
for filename in *.mkv
do
## Exit if there are no srt files
[ ! -e *.srt ] && echo "No .srt files found, exiting" && exit
echo "$filename"
newfilename="${filename%.mkv}.mp4"
echo "${newfilename}"
ffmpeg -fix_sub_duration -i "$filename" -c:v copy -c:a copy -c:s mov_text "$newfilename"
done
Eu removi o IFS='\n' , pois ele não está fazendo nada de útil lá, seu for loop é bastante seguro, mesmo com nomes que contenham espaços em branco, desde que você cite suas variáveis.
O [ -e foo ] testa a existência de foo . Por outro lado, [ ! -e foo ] é verdadeiro se não houver foo . Nesse caso, foo é um glob ( *.srt ), portanto, o teste será falso se algum arquivo correspondente for encontrado. No script acima, && significa que, se nenhum arquivo srt for encontrado, a mensagem de erro será impressa e o script será encerrado.