Microsoft предоставляет виртуальные машины с различными версиями IE на modern.ie для тестирования веб-сайтов. Вы можете использовать VirtualBox, чтобы запустить их на Linux.
В настоящее время они предлагают следующие версии Internet Explorer - Windows:
true
и false
— это команды, которые завершаются с кодами успешного и неудачного завершения соответственно. Они не заставляют вашу функцию возвращать эти значения, для этого используйте команду return
и целочисленные значения, соответствующие успеху (0 )или сбою (что-либо отличное от 0 ). Кроме того, я почти уверен, что вы не хотите возвращать отказ для первой строки, которая не соответствует, только если нет строки, совпавшей:
check(){
file=/root/Turkiye.txt
local funkx=$1
while read line; do
if [ "$line" == "$funkx" ]
then
return 0 # 0 = success ("true"); break is not needed because return exits the function
fi
done < $file
# If a line matched, it won't get here (it will have returned out of the middle
# of the loop). Therefore, if it gets here, there must not have been a match.
return 1 # 1 = failure ("false")
}
Но есть гораздо более простой способ сделать это. Используйте grep
--, его работа заключается в поиске в файлах совпадающих строк. Вы хотитеgrep -Fxq
---F
означает поиск фиксированных строк (не шаблонов регулярных выражений ), -x
означает, что требуется совпадение всей строки, а не только ее части, а -q
означает, что не нужно печатать результат, просто выйдите со статусом успеха, если совпадение было найдено, в противном случае произойдет сбой. И даже не нужна явная команда return
, так как функция будет неявно возвращать статус последней команды в ней:
check(){
file=/root/Turkiye.txt
local funkx=$1
grep -Fxq "$funkx" "$file"
}
Или еще проще:
check(){
grep -Fxq "$1" /root/Turkiye.txt
}
Тестирование вашего кода на другом файле, действительно работает, даже если немного неэффективно. Предполагая, что файл /root/Turkiye.txt
не является пустым файлом -, к которому у вас есть доступ, вызовы true
и false
,поскольку они являются последними командами, которые будут выполняться в функции, устанавливает статус выхода функции либо равным нулю, либо отличному от -нулю.
Возможно, вы просто вводите в сценарий строки, которые не могут быть найдены в виде отдельных строк в файле, который вы читаете. К сожалению, в вопросе неясно, как выглядит файл, который вы анализируете, что вы вводите в свой скрипт и что вы ожидаете получить в ответ от скрипта при этом.
Также обратите внимание, что while read line
не обязательно считывает строк из входного файла. См., например. " Понимание "IFS= read -r line" ", а также того, что в [... ]
оператор, сравнивающий две строки, - это =
, а не ==
.
Вам также необходимо заключить в двойные кавычки $keyboard
вызов check
, чтобы избежать разделения слов и генерации имени файла (подстановки ).
Похоже, вы хотите использовать свою функцию, чтобы определить, встречается ли строка, прочитанная пользователем, как строка в конкретном файле.
Это можно было бы сделать проще с помощью
grep -qxF -e "$keyboard" /root/Turkiye.txt
Эта команда grep
будет искать строку в заданном файле и возвращать нулевой статус выхода(true ), если будет найдена точно идентичная строка, и в противном случае будет возвращать не -ноль статус выхода(ложь). Здесь используются следующие параметры: -q
для того, чтобы grep
ничего не выводить, -x
для сравнения полных строк (без подстрок )и -F
для сравнения строк (без сопоставления с регулярными выражениями ). -e
сообщает grep
, что следующим аргументом является шаблон поиска (, начальный -
в шаблоне в противном случае был бы воспринят как введение параметра командной строки ).
Ваш скрипт изменен:
printf 'Please enter the value: ' >&2
IFS= read -r keyboard
if grep -qxF -e "$keyboard" /root/Turkiye.txt; then
echo 'yes'
else
echo 'no'
fi
Обратите внимание, что я вывожу приглашение пользователю ввести строку в стандартный поток ошибок.Это принято по соглашению и позволяет перенаправлять вывод сценария и использовать его без приглашения.
В bash
вы бы использовали
IFS= read -r -p 'Please enter the value: ' keyboard
(Обратите внимание, что bash
также выводит строку приглашения в стандартный поток ошибок при использовании read -p
.)
Если вы хотите использовать grep
в функции:
check () {
grep -qxF -e "$1" /root/Turkiye.txt
}
Затем используйте
if check "$keyboard"; then
echo 'yes'
else
echo 'no'
fi