В ext2/3/4 можно сделать некоторое приближение на основе размера самого каталога. Это не очень точно, но позволяет образованное предположение без "подсчета".
Каталог запускается на уровне 4 096 байтов по умолчанию. Поскольку это получает больше записей, это увеличивается в размере (но никогда не будет уменьшаться снова). После некоторого тестирования кажется, что каждая запись берет 12 байтов и растет на 4 096, когда это достигает предела. Это означает, что, если размер текущего каталога 16384, Вы имели между 1 024 и 1 365 записями когда-то.
Существует также прием к просмотру файлов в этих каталогах сразу. Когда Вы работаете ls
, весь каталог прочитан и затем отсортирован. Можно отключить использование сортировки ls -1U
.
Похоже, что в строке с оператором case отсутствует « in
», а также закрывающий esac
:
echo "Do you wish to search again? [y/n]"
read INPUT_STRING2
case $INPUT_STRING2 in
y)
;;
*)
exit
;;
esac
Я хочу, чтобы мой скрипт сказал пользователю, не найдена ли строка ..... Я пытался ... использовать
-
, но это не сработало.
Что ты пытался?
if grep -q "$STRING" "$FILE"
then
echo "string found"
else
echo "string not found"
fi
работает.
P.S. Советую процитировать все ссылки на переменные оболочки.
(например, "$INPUT_STRING2"
, "$STRING"
и "$FILE"
).
если только у тебя нет веских причин не делать этого, и ты уверен, что знаешь, что делаешь.
И наоборот, вам не нужно цитировать константные строки (например, найденная строка
).
если только они не содержат специальных символов.
(Квадратные скобки - "[
" и "]
" - являются специальными символами в этом контексте)).
Но в любом случае, хорошо бы их процитировать.
Вы сделали две синтаксические ошибки ( в
после переменной и esac
в конце утверждения дела):
echo "Do you wish to search again? [y/n]"
read INPUT_STRING2
case $INPUT_STRING2 in
"y")
echo "Searching again"
;;
*)
exit
;;
esac