Почему бы просто не повторить прочитанное?
unset i
while [[ ! "$i" =~ ^[yYnN]$ ]]; do read -r -p "Would you like to continue [Y/N] : " i; done
Предлагаю следующее решение:
#!/bin/bash
parse() {
# get idX filenameX typeX
id=$1
filename=$2
typo=$3
# if typeX is missing, set to csv
[ -z "$typo" ] && typo="csv"
# check if filenameX exists on disk
[ -f "$filename.$typo" ] && echo "Filename $filename exists"
}
while IFS= read -r line
do
parse_line=`echo $line | grep -vE '^(\s*$|#)'`
[ ! -z "$parse_line" ] && parse $parse_line
done < "$1"