Как стать автором
Обновить

Комментарии 6

А выпускающую организацию нельзя заставить присылать уведомление о выпуске сертификата на корпоративную почту? Я бы хотел чтобы Контур по моей конторе просто присылал алерт что сертификат получен пользователем, но ещё не смотрел в эту строну

Здравствуйте, к сожалению тоже пока не изучил этот вопрос, уточню у коллег на неделе, отвечу вам как только что нибудь узнаю.

предложениям по оптимизации bash скрипта

1

Сразу скажу, что #!/bin/sh и конструкции вида [[ ... ]] или (( ... <= ... )) (которые назыаются башизмами) - несовместимые вещи. Такой шебанг в начале скрипта предполагает, что это будет классифеский шелл, который не поддерживает удобные, расширенные возможности баша.

Поэтому: или #!/usr/bin/env bash и используйте всю мощь баша или откажитесь от башизмов.

2

Выхлоп команды всегда оборачивайте в двойные кавычки. Хотя это уже давно не так, но не каждый шелл понимает, что строка вида "слово слово слово" это одна цельная строка а не одно слово как значение переменной, а все остальное это некоторая команда, которую шелл может и выполнить.

3

Надо оптимизировать скрипт: я насчитал 5 вызовов команды certmgr -list. При этом в трех местах используется grep -E "Subject ". Понятно, что в каждый момент вы собираете разную информацию, но это очень не рационально.

4

Ваш скрипт построен по принципу

команда1 > FILE
команда2 >> FILE
cat FILE

Вероятно нет смысла вначале все сохранять в файл, а потом этот файл выводить. надо сразу писать в STDOUT. Если промежуточный результат надо еще как-то дополнительноо обработать, то можно сделать примерно так:

что-то-писать() {
	команда1
	команда2
}

что-то-писать | как-то-обрабатывать

5

Простите, но cat FILE | tail -n $COUNTER | head -n 1 - это ужасно. Определенно, требуется оптимизация в части пунктов 3 и 4.

Я понимаю, что оно уже работает и чего его трогать. Но неоптимально написанный код в будущем порождает "неоптимальную оптимизацию".

6. Резюме

Я не знаю, как работает certmgr и каков его выхлоп, но смею предположить, что однократный вызов certmgr -list | grep -e 'Subject ' -e 'Not valid after' > "$TMP/certmgr-$$.out" уже будет существенной оптимизацией. А дальше работать с файлом "$TMP/certmgr-$$.out".

Выразительных средств awk/perl будет достаточно, чтобы оптимизировать скрипт, поддерживать его в дальнейшем и даже, при необходимости, с легкостью улучшать.

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

Забыл сказать. Хранить временные файлы в текущем каталоге - не есть хорошо. Если вы рут, то вы просто засоряете ФС. Если рядовой - у вас может не быть прав на текущий каталог и результат вашего скрипта - не предсказуем.

Почему это важно. Скрипт можно завершить разными способами: клавишами CTRL-C, командой kill. В результате - команды rm FILE в конце скрипта могут быть и не выполнены. А в ФС вы оставите следы выполнения скрипта в произвольном месте.

Лучшее решение для этого (но этого не гарантирует от полной очистки ФС и, тем более, от авадакедавры типа kill -9) - в начале скрипта описать что-то вида:

# Какой-то временный файл, который нужен только на время выполнения скрипта
# $$ - PID текущего процесса в имени файла, обеспечивает уникальность файла
TMPFILE="${TMP:-/tmp}/certmgr-list-$$.out"

# ловушка - код, который будет выполнен по выходу (`EXIT`) из скрипта
# может быть внешней или внутренней командой или шелл-функцией
trap 'rm -f "$TMPFILE"' EXIT

И вам уже не надо писать отдельные команды для удаления временных файлов.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории