FileCount в Unix

Я пытаюсь найти количество файлов в каталоге. Я использую команду ls. Основываясь на количестве файлов, мне нужно отобразить количество и сообщение. Скрипт не дает желаемого результата. Любая помощь будет оценена по достоинству.

#!/bin/sh

FILECOUNT = $(ls /opt/report/ | grep *.ZIP_30 | wc -l);

if [ $FILECOUNT -gt "0" ]; then
      echo "Statistic.filecount: $FILECOUNT";
      echo "Message.filecount: Normal";
else
      echo "Statistic.filecount: $FILECOUNT";
      echo "Message.filecount: Warning";
fi;

exit 0;

Вам не нужно заключать в кавычки литералы, но вам (обычно) нужно заключать в кавычки переменные. Строка if [ $FILECOUNT -gt "0" ] идет ровно наоборот и должна быть if [ "$FILECOUNT" -gt 0 ]. Кавычки вокруг 0 — это нормально, но отсутствующие кавычки вокруг $FILECOUNT — это потенциальная проблема.

William Pursell 16.05.2022 23:55

Спасибо. Я смог заставить его работать с предложенными изменениями.

SQL Novice 17.05.2022 23:00
Формы c голосовым вводом в React с помощью Speechly
Формы c голосовым вводом в React с помощью Speechly
Пытались ли вы когда-нибудь заполнить веб-форму в области электронной коммерции, которая требует много кликов и выбора? Вас попросят заполнить дату,...
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Стилизация и валидация html-формы без использования JavaScript (только HTML/CSS)
Будучи разработчиком веб-приложений, легко впасть в заблуждение, считая, что приложение без JavaScript не имеет права на жизнь. Нам становится удобно...
Flatpickr: простой модуль календаря для вашего приложения на React
Flatpickr: простой модуль календаря для вашего приложения на React
Если вы ищете пакет для быстрой интеграции календаря с выбором даты в ваше приложения, то библиотека Flatpickr отлично справится с этой задачей....
В чем разница между Promise и Observable?
В чем разница между Promise и Observable?
Разберитесь в этом вопросе, и вы значительно повысите уровень своей компетенции.
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Что такое cURL в PHP? Встроенные функции и пример GET запроса
Клиент для URL-адресов, cURL, позволяет взаимодействовать с множеством различных серверов по множеству различных протоколов с синтаксисом URL.
Четыре эффективных способа центрирования блочных элементов в CSS
Четыре эффективных способа центрирования блочных элементов в CSS
У каждого из нас бывали случаи, когда нам нужно отцентрировать блочный элемент, но мы не знаем, как это сделать. Даже если мы реализуем какой-то...
1
2
26
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Ответ принят как подходящий

У вас синтаксическая ошибка.

Вокруг = в оболочке не допускаются пробелы, поэтому:

filecount=$(grep -c ZIP_30 /opt/report/*)

Спасибо, Жиль, это сработало как шарм.

SQL Novice 17.05.2022 22:58

Общий совет не анализировать результат ls, поэтому я бы посоветовал вам следующую команду:

find /opt/report/ -maxdepth 1 -name "*.ZIP_30" | wc -l

Помимо синтаксической ошибки вокруг =, которую прокомментировал Жиль указал, и проблемы с цитированием, которую прокомментировал Уильям Пёрселл, есть более простой способ подсчета количества файлов: используйте оболочку!

shopt -s nullglob
set -- /opt/report/*.ZIP_30
filecount=$#
if [ "$filecount" -gt 0 ]; then
      echo "Statistic.filecount: $filecount";
      echo "Message.filecount: Normal";
else
      echo "Statistic.filecount: $filecount";
      echo "Message.filecount: Warning";
fi;

exit 0;

Основная идея состоит в том, чтобы использовать функцию расширения оболочки (подстановочные знаки) для установки позиционных параметров в список соответствующих файлов. Я использовал функцию оболочки bash (nullglob) для случая, когда нет подходящих файлов. Обычно оболочка оставляет текст /opt/report/*.ZIP_30 в результате пустого совпадения, но мы пытаемся подсчитать файлы, поэтому мы хотим, чтобы он исчез, когда нет подходящих файлов. Переменная $# получает количество позиционных параметров, что дает нам количество файлов. Я также сократил номер переменной оболочки, как хорошая привычка, чтобы предотвратить затирание имен встроенных переменных оболочки.

Другие вопросы по теме