Как сравнить пользовательский ввод с контентом в текстовом файле?

0

Я делаю сценарий, который позволяет пользователям сохранять свои настройки в текстовом файле. Если они хотят использовать сохраненные настройки, им нужно будет ввести название настроек. Затем скрипт сравнит вводимые пользователем данные, чтобы найти имя в текстовом файле. Если он находит подходящее имя, он извлекает всю строку из этого текстового файла. Пока мой код выглядит так.

echo enter setting name
    read name
    #count=0
    while IFS= read line
    do
        if [ "$name" == "$settingName" ]
        then
            cp **/*"$ft1" $dir1
        else
            echo "file doesnt exist"
        fi
    done < preco.txt

Код, который я использовал для сохранения переменных:

echo save settings?
    read decision
    if [ "$decision" = "y" ]
        then
        echo enter settings name
        read settingName

        echo $settingName $dir1 $ft1 >> preco.txt
    else
        echo "bye"
        exit

Я хочу, чтобы $ dir1 и $ ft1 вводились в cp

user352457
источник

Ответы:

0

Было бы неплохо, если бы вы включили пример файла настроек, хотя мы можем догадаться по коду, который сохраняет настройки.

Одна проблема с вашим кодом заключается в том, что нет "$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в именованные переменные.

С другой стороны, вы не хотите отображать сообщение об ошибке для каждой строки, которая не соответствует, вы должны прочитать файл и отображать сообщение об ошибке, только если ни одна из строк не соответствует.

RalfFriedl
источник