Когда вы делаете это:
check=`echo $?`
Вы заставляете оболочку расширяться $?
, чтобы составить команду echo $?
, а затем назначить ее вывод переменной. Если вы хотите сохранить статус возврата команды, вырежьте среднего человека и просто сделайте следующее:
check=$?
Однако в вашем случае вам не нужно сохранять статус возврата. Оператор if
сам по себе может выполнить проверку &&
.
Итак, если вы хотите найти текстовый файл, содержащий две строки, сделайте следующее:
if grep -qwF "$Author" "BookDB.txt" && grep -qwF "$Title" "BookDB.txt"; then
echo Yes
fi
Параметр -q
предназначен для подавления вывода grep
и -F
- не анализировать шаблон как регулярное выражение.
Однако, что вы, скорее всего, ищете, это строка, содержащая заголовок, за которым следует имя автора, учитывая ваш пример. Итак, вы можете попробовать следующее:
if grep -q "^\\s*$Title\\s*:\\s*$Author\\s*\$" "BookDB.txt"; then
echo yes
fi
Это потребует от пользователя ввести полное название и полное имя автора, а также правильно указать регистр.Так что, может быть, вам нужно что-то более снисходительное:
if grep -qi "$Title.*:.*$Author" "BookDB.txt"; then
echo yes
fi
Теперь вас не волнует регистр и вам не нужны полные имена ( John
и john
оба соответствуют ДЖОН Кавендиш
). То же относится к названию.
Следующий MCVE
echo Title:
read Title
echo Author:
read Author
if grep -qi "$Title.*:.*$Author" "BookDB.txt"; then
echo Found
fi
работает для следующего файла "BookDB.txt":
Название книги: AuthorName
Название книги: authorname
Название книги: Authorname
книга: authorName
с тестовым примером книга
и автор
.
Я бы использовал resize
:, он обновляет stty
настройки (, которые теряются при прямом подключении к встроенному устройству, а также то, что необходимо дляscreen
).
resize
представляет собой командную -линейную утилиту (, разработанную совместно с xterm
), которая проверяет фактический размер экрана -(с помощью escape-последовательностей VT100 -)и обновляет stty
для отражения этого размера, а также команды печати, которые можно выполнить для обновления переменных среды.
Изменение $COLUMNS
внутри screen
не очень эффективно, так как screen
«знает», насколько велик экран терминала, и будет мешать программам, которые предполагают другой размер.