Было бы неплохо, если бы вы включили пример файла настроек, хотя мы можем догадаться по коду, сохраняющему настройки.
Одна из проблем с вашим кодом заключается в том, что в нем нет "$settingName"
.
Примерно так должно работать, если в параметрах нет пробелов.
echo enter setting name
read name
found=false
while read settingName dir1 ft1
do
if [ "$name" == "$settingName" ]
then
cp "$ft1" $dir1
found=true
fi
done < preco.txt
if ! $found; then
echo "$name not found"
fi
Оператор read settingName dir1 ft1
прочитает три поля из вашего файла preco.txt
в именованные переменные.
Другой момент заключается в том, что вы не хотите отображать сообщение об ошибке для каждой несоответствующей строки, вы должны прочитать файл и отобразить сообщение об ошибке только в том случае, если ни одна из строк не совпадает.