LINUX.ORG.RU

Помогите с башем

 ,


0

1

Накидал маленький скриптик чтоб из .pfx серты выдерать по файлам:

#!/bin/bash
read -p "Enter pfx filename (*.pfx): " PFXNAME
read -p "Enter key filename (*.key): " KEYNAME
read -p "Enter cert filename (*.cer): " CERTNAME
read -p "Enter CA cert filename (*.cer): " CACERTNAME
openssl pkcs12 -in $PFXNAME.pfx -nocerts -nodes | sed -ne '/-BEGIN PRIVATE KEY-/,/-END PRIVATE KEY-/p' > $KEYNAME.key
openssl pkcs12 -in $PFXNAME.pfx -clcerts -nokeys | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > $CERTNAME.cer
openssl pkcs12 -in $PFXNAME.pfx -cacerts -nokeys -chain | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > $CACERTNAME.cer

А можно без sed обойтись? Он как бы не всегда доступен.

Deleted

START=""; echo -e "One\nTwo\nThree\nFour\nFive\nSix\nSeven" | while read LINE ; do [[ "$LINE" = "Five" ]] && START="" ; [[ -n "$START" ]] && echo "$LINE" ; [[ "$LINE" = "Two" ]] && START="YES" ; done
Kroz ★★★★★ ()

А можно без sed обойтись? Он как бы не всегда доступен.

объясните словами, что вы хотите сделать. grep -v не поможет?

Crystal_HMR ★★★ ()
Ответ на: комментарий от Kroz

Офигеть, специально чтоли в одну строку тянули, чтоб читали и матерились?

Занятно, что переписал на if-ах и стало быстрее (там, правда, ещё малось другие методы оптимизации, но их сравнивал отдельно):

O=0
while read LINE ; do
        if [[ -n $O ]]; then
                if [[ Five == "$LINE" ]]; then
                        O=
                else
                        [[ 1 -eq $O ]] && echo "$LINE" || [[ Two == "$LINE" ]] && O=1
                fi
        fi
done << EOF
$(echo -e "One\nTwo\nThree\nFour\nFive\nSix\nSeven")
EOF
vodz ★★★★★ ()
Последнее исправление: vodz (всего исправлений: 1)
Ответ на: комментарий от Deleted

Вот то же, не не однострочник.

Только когда будешь к своему решению применять, подправь:

Вместо echo -e "One\nTwo\nThree\nFour\nFive\nSix\nSeven"
подставляешь openssl pkcs12 -in $PFXNAME.pfx -nocerts -nodes

Вместо Two
подставляешь -BEGIN PRIVATE KEY-

Вместо Five
подставляешь -END PRIVATE KEY-

START="" # Начальное значение переменной. Если значение переменной не пустое - выводим строки. если пустое - не выводим

echo -e "One\nTwo\nThree\nFour\nFive\nSix\nSeven" | while read LINE ; do # Читаем построчно выхлоп команды в переменную Line
  [[ "$LINE" = "Five" ]] && START=""   # Если прочитанная строка "-END PRIVATE KEY-" - опустошаем START (с этого момента не выводим строки)
  [[ -n "$START" ]] && echo "$LINE"    # Если значение переменной START не пустое - выводим только что прочитанную строку
  [[ "$LINE" = "Two" ]] && START="YES" # Если прочитанная строка "-BEGIN PRIVATE KEY-" - заполняем START (с этого момента выводим строки)
done

Kroz ★★★★★ ()
Ответ на: комментарий от vodz

Офигеть, специально чтоли в одну строку тянули, чтоб читали и матерились?

Нет, чтобы в тех примерах, что ТС в топике описал, можно было заменить sed на мой однострочник. А твой вариант нужно в отдельный скрипт запихивать. Да еще и не очевидным (для новичка) образом переделывать << EOF $(...

Kroz ★★★★★ ()
Последнее исправление: Kroz (всего исправлений: 2)
Ответ на: комментарий от Kroz
openssl pkcs12 -in $PFXNAME.pfx -nocerts -nodes | sed -ne '/-BEGIN PRIVATE KEY-/,/-END PRIVATE KEY-/p' > $KEYNAME.key

превращается в

START=""; openssl pkcs12 -in $PFXNAME.pfx -nocerts -nodes | while read LINE ; do [[ "$LINE" = "-END PRIVATE KEY-" ]] && START="" ; [[ -n "$START" ]] && echo "$LINE" ; [[ "$LINE" = "-BEGIN PRIVATE KEY-" ]] && START="YES" ; done > $KEYNAME.key

Kroz ★★★★★ ()
Ответ на: комментарий от Kroz

нужно в отдельный скрипт запихивать. Да еще и не очевидным (для новичка) образом переделывать

Ну это ещё не факт, что новичку будет проще, если у него таки скрипт, а это только одна из команд вызывающая затруднение. В вашем однострочнике read из пайпа и после однострочника все переменные превратятся в тыкву по умолчанию как сопроцессные.

vodz ★★★★★ ()
Ответ на: комментарий от vodz

В вашем однострочнике read из пайпа и после однострочника все переменные превратятся в тыкву по умолчанию как сопроцессные.

Посмотри внимательно на мой скрипт (чуть выше он не в виде однострочника) и скажи, зачем мне значения переменных после цикла.

Kroz ★★★★★ ()
Ответ на: комментарий от Kroz

зачем мне значения переменных после цикла.

Вы не поняли. Простой последовательный пайп хорош в виде однострочника как самого по себе. Но мы то точно видим, что у автора не однострочник. Сегодня он формирует временные выходные файлы через echo, а завтра захочет это реализовать в виде нормального скрипта с переменными без лишнего ввода-вывода. Вы же сами изначально сделали не конкретную задачу, а в общем виде дали подсказку. Ну так и я в общем виде дал подсказку как это делать для скрипта удобнее и чтобы работало быстрее.

vodz ★★★★★ ()
Ответ на: комментарий от vodz

Сегодня он формирует временные выходные файлы через echo, а завтра захочет это реализовать в виде нормального скрипта с переменными без лишнего ввода-вывода.

А послезавтра он изучит ассемблер.
Давай решать проблемы по мере их поступления.

В любом случае у ТС'а два ответа, твой и мой, пусть сам решает.

Kroz ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.