Очистить bash-скрипт

Вопрос или проблема

Может кто-то очистить эту часть скрипта bin bash для меня? Я чувствую, что могу написать это намного чище.

В основном, что я хочу сделать:

  • Если $pluginexcl2 определен, тогда будут использоваться 2 разных grep -v
  • Если $pluginexcl1 определен, то будет использоваться только 1 grep -v
  • Если оба не определены, не использовать grep -v.

Помощь будет оценена.

# Улучшаем код curl
curl_url=$(curl -s https://api.github.com/repos/${pluginrepo}/releases/latest)
 
# Фильтруем grep :D
if [ -n "${pluginexcl1}" ] && [ -n "${pluginexcl2}" ]; then
    echo "$curl_url" | grep -wo "$plugingrep" | grep -v "$pluginexcl1" | grep -v "$pluginexcl2" | wget -qi - -O "${pluginfile}"
elif [ -n "${pluginexcl1}" ]; then
    echo "$curl_url" | grep -wo "$plugingrep" | grep -v "$pluginexcl1" | wget -qi - -O "${pluginfile}"
else
    echo "$curl_url" | grep -wo "$plugingrep" | wget -qi - -O "${pluginfile}"
fi

Попробуйте это..

curl_url=$(curl -s https://api.github.com/repos/${pluginrepo}/releases/latest)
grep_command="grep -wo \"$plugingrep\""
[ -n "${pluginexcl1}" ] && grep_command+=" | grep -v \"$pluginexcl1\""
[ -n "${pluginexcl2}" ] && grep_command+=" | grep -v \"$pluginexcl2\""
echo "$curl_url" | eval "$grep_command" | wget -qi - -O "${pluginfile}"

Я не тестировал весь скрипт, но не вижу в нем никаких секретов или монстров. Ха-ха

Надеюсь, это поможет!

Консолидируйте два условных оператора grep -v в одну операцию с использованием -Extended regex, в сочетании с подстановкой параметра бессмысленной строки, если переменные не заполнены.

Одна идея заменить весь блок if/elif/else/fi:

echo "$curl_url" | grep -wo "$plugingrep" | grep -Ev "${pluginexcl1:-XXXX}|${pluginexcl2:-XXXX}" | wget -qi - -O "${pluginfile}"

Замените XXXX строкой, которая, как вы уверены, не встречается в содержимом $curl_url.

ЗАМЕТКИ:

  • Я предполагаю, что текущий код OP работает как ожидается.
  • Я (очевидно) не могу протестировать это, так как нам не предоставлены образцы содержимого упомянутых переменных.

Ответ или решение

Чтобы улучшить читаемость и чистоту Bash-скрипта, необходимо оптимизировать логику фильтрации с использованием grep. Из предоставленной информации ясно, что наша цель состоит в том, чтобы использовать grep -v в зависимости от наличия определённых переменных. В результате мы можем применить регулярные выражения и параметры подстановки для упрощения кода.

Оптимизированный код

Вот переработанная версия вашего скрипта, которая улучшает его читаемость и уменьшает количество условных операторов:

# Получаем данные с API
curl_url=$(curl -s https://api.github.com/repos/${pluginrepo}/releases/latest)

# Используем grep с условной фильтрацией
exclude_pattern="${pluginexcl1:-XXXX}|${pluginexcl2:-XXXX}"

# Выполняем фильтрацию и загрузку
echo "$curl_url" | grep -wo "$plugingrep" | grep -Ev "$exclude_pattern" | wget -qi - -O "${pluginfile}"

Пояснение проведенных изменений

  1. Объединение условий: Вместо использования нескольких условных операторов, мы сформировали переменную exclude_pattern, которая содержит шаблоны для grep -v. Если переменная не определена, мы используем строку XXXX, которая гарантированно не встречается в содержимом $curl_url.

  2. Упрощение логики: Отказавшись от условных операторов, мы сделали код более лаконичным и легким для понимания. Логика обработки данных остается той же, но становится более структурированной.

  3. Поддержка расширенных регулярных выражений: Используя grep -E, мы можем включать несколько шаблонов в одну строку. Это значительно упрощает процесс фильтрации.

  4. Чистота и читаемость: Код стал более читабельным. Теперь проще увидеть, что происходит, когда вы читаете его.

Заключение

Этот стиль кода не только облегчает понимание, но и способствует дальнейшему сопровождению скрипта. Оптимизация таких участков имеет важное значение при работе с Bash, так как они могут улучшить производительность и качество кода.

Если у вас есть дополнительные вопросы или требуется дальнейшее пояснение, пожалуйста, не стесняйтесь обращаться.

Оцените материал
Добавить комментарий

Капча загружается...