LINUX.ORG.RU

Проверка версии ядра bash

 


1

1

Привет лор, пишу скрипт который проверяет, если ядро выше чем 3.17 тогда выполняет действие

function check_version {
  local kernel=$(uname -r)
  if [ "$kernel" >= "3.17" ]; then
  echo TEST
  exit 1
}

Работать оно работает, но вот проблема в том, что если ядро например 3.17-memes тогда скрипт крашится.

Я обычно писал в case такое и делал бы 3.17-* но вот проблема в том что я не знаю как сделать проверку больше или равно в case.

Deleted

Решил.

В переменную kernel положил uname -r | cut -d "-" -f1 -

и получил версию ядра без приписок всяких

Deleted
()
Ответ на: комментарий от Anoxemian

Да да, в моих кривык руках. Это же очевидно

Deleted
()
# $1: a kernel release of an installed kernel (the default is`uname -r`)
function get_linux_version
{
	local makefile_path="/usr/lib/modules/${1:-"$(uname -r)"}/build/Makefile"

	cat "$makefile_path" | grep '^VERSION = ' | cut -d' ' -f3
}

# $1: a kernel release of an installed kernel (the default is `uname -r`)
function get_linux_patchlevel
{
	local makefile_path="/usr/lib/modules/${1:-"$(uname -r)"}/build/Makefile"

	cat "$makefile_path" | grep '^PATCHLEVEL = ' | cut -d' ' -f3
}

printf '%d.%d' "$(get_linux_version)" "$(get_linux_patchlevel)"
kalterfive ★★
()

Мдауш

Работать оно работает

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

d_a ★★★★★
()

на версии 3.2, справнивая с 3.17 ты получишь логический фэйл.
могу посоветовать: sort -V

REQUEST="3.17"
CURVER=$(uname -r)
NEWEST=$( echo -e "${CURVER}\n${REQUEST}" | sort -Vr | head -n1 )
if [[ "${NEWEST}" == ${REQUEST} ]]
then
 echo TEST ## version check failed
 exit 1
fi 

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