Bash для проверки того, что число оборотов в минуту по крайней мере в данной версии

Мне нужно написать сценарий, чтобы убедиться, что RPM является хотя бы одной версией в Linux.

  • ВОПРОС 1: Как я могу получить версию RPM в переменной $ RPM_VERSION, чтобы она содержала версию до «.src.rpm»?
  • ВОПРОС 2: Каков наилучший подход для сравнения двух версий?

Например: rpm-4.2-9.69.src.rpm по сравнению с об / мин-4.14-0.69.src.rpm. Это моя попытка, но она не работает:

STR_BASE_ACCEPTABLE_VER="rpm-4.2-0.69.src.rpm" if [[ "$RPM_VERSION" < "$STR_BASE_ACCEPTABLE_VER" ]]; then echo "$RPM_VERSION is too low..." \ else echo "$RPM_VERSION is fine" \ fi 

Пожалуйста помоги.

Разборные версии

Хакей

В первой части я бы запросил RPM для конкретной информации о версии.

 $ rpm -qi vim-enhanced | grep Version Version : 7.4.417 

Затем вы можете разобрать это так:

 $ rpm -qi vim-enhanced | awk -F': ' '/Version/ {print $2}' 7.4.417 

Это можно записать в переменную следующим образом:

 $ RPM_VERSION=$(rpm -qi vim-enhanced | awk -F': ' '/Version/ {print $2}') $ echo $RPM_VERSION 7.4.417 

Использование queryformats

Средство rpm также предоставляет средство под названием --queryformat которое позволяет настраивать вывод, который он генерирует. Зная это, вы можете указать rpm на печать макроса «VERSION» следующим образом:

 $ rpm -q --queryformat '%{VERSION}' vim-enhanced 7.4.417 

Помещая это в переменную:

 $ RPM_VERSION=$(rpm -q --queryformat '%{VERSION}' vim-enhanced) 

ПРИМЕЧАНИЕ. Вы можете увидеть все теги запроса, используя переключатель --querytags для rpm , например:

 $ rpm --querytags | head -5 ARCH ARCHIVESIZE BASENAMES BUGURL BUILDARCHS 

Сравнение версий

Сделать сравнение будет сложнее. К счастью, в пакете rpmdev-vercmp под названием rpmdev-vercmp который может вам очень помочь.

Применение

 $ rpmdev-vercmp --help rpmdev-vercmp <epoch1> <ver1> <release1> <epoch2> <ver2> <release2> rpmdev-vercmp <EVR1> <EVR2> rpmdev-vercmp # with no arguments, prompt Exit status is 0 if the EVR's are equal, 11 if EVR1 is newer, and 12 if EVR2 is newer. Other exit statuses indicate problems. 

Если вы заметите возвращаемые статусы выхода, вы можете узнать, какая версия является более новой, просто попросив этот инструмент, указав ему 2 имени RPM.

пример

 $ rpmdev-vercmp rpm-4.2-9.69 rpm-4.14-0.69 rpm-4.2-9.69 < rpm-4.14-0.69 $ echo $? 12 

Таким образом, на основе кода выхода 12, второй аргумент будет более новым из 2.

Объединяя это

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

 rpmdev-vercmp $RPM_VERSION $STR_BASE_ACCEPTABLE_VER > /dev/null if [[ $? == 12 ]]; then echo "$RPM_VERSION is too low..." else echo "$RPM_VERSION is fine" fi 

Тогда, если бы мы задавали такие переменные:

 $ STR_BASE_ACCEPTABLE_VER="rpm-4.2-9.69" $ RPM_VERSION="rpm-4.14-0.69" $ ./cmp_rpmvers.bash rpm-4.14-0.69 is fine 

ЕСЛИ я их заменю:

 $ STR_BASE_ACCEPTABLE_VER="rpm-4.14-0.69" $ RPM_VERSION="rpm-4.2-9.69" $ ./cmp_rpmvers.bash rpm-4.2-9.69 is too low... 

Для вопроса № 2 (если у вас нет rpmdevtools и не можете его установить):

При минимальной установке вы все равно должны иметь yum, поэтому у вас также должен быть пакет python и rpm python. Тогда сравнение двух версий может выглядеть так:

 python -c "import sys,rpm; print rpm.labelCompare((None, '$VER1', '$REL1'), (None, '$VER2', '$REL2'));" 

Учитывая имя пакета «rpm-4.14-0.69», $ VER является частью версии (4.14), а $ REL является частью выпуска (0.69). Вы можете извлечь их, разделив имя пакета на '-'. Я поставил None для частей эпохи здесь, так как ваш пример не содержит эпохи в имени пакета.

Результат labelCompare будет равен 0, 1 или -1.

Фактически, вы можете просто попробовать загрузить rpmdev-vercmp или rpmdev-sort ( https://fedorahosted.org/releases/r/p/rpmdevtools/ ) и использовать их без установки rpmdevtools, так как это простые скрипты python.