Он не должен реагировать. Он делает именно то, что должен: считывает ввод и присваивает его переменной тип файла
. Тем не менее, у вас есть пока
цикл, который проверяет значение переменной, которая никогда не изменяется:
в то время как [[ "$fileType" != "ВЫХОД" ]];
Поскольку значение $fileType
устанавливается только один раз и перед пока
петля, что пока
становится бесконечным циклом, если вы не передадите ВЫХОД
с первой попытки. В любом случае ваш скрипт все равно не будет работать, так как вывод файл шаблона grep -q
не будет никогда 1
. На самом деле он всегда будет пустым, так как вот что grep -q
делает. Я подозреваю, что вы хотели проверить статус выхода команды, но даже это бессмысленно: нет смысла читать весь файл один раз с помощью grep -q
только для того, чтобы потом перечитать все это снова с грэп -F
.
Вот рабочая версия вашей функции:
функция найтиФайлы() {
в то время как [[ "$fileType" != "ВЫХОД" ]];
делать
echo "Введите тип файла для поиска (включая '.') || Введите EXIT для завершения программы "
читать тип файла
grep -F "$fileType" index.html >> foundFiles.txt
сделано
РМ index.html
};
Или, если вы хотите избежать создания пустого найденные файлы.txt
если совпадений не найдено, вы можете попробовать:
функция найтиФайлы() {
в то время как [[ "$fileType" != "ВЫХОД" ]];
делать
echo "Введите тип файла для поиска (включая '.') || Введите EXIT для завершения программы "
читать тип файла
если grep -qm1 "$fileType" index.html; тогда
grep -F "$fileType" index.html >> foundFiles.txt
фи
сделано
РМ index.html
};
-м
обеспечивает grep
завершается после первого совпадения, поэтому вам не нужно дважды читать весь файл. Обратите внимание, что я не использую подстановку команд ($(команда)
), так как я проверяю успешность выполнения команды и не пытаюсь использовать ее вывод.