Как узнать версию Ubuntu в системе с помощью скрипта .sh (bash)?

9

Поэтому я пытаюсь создать исполняемый файл bash, и мне нужно знать номер версии Ubuntu в системе. Все способы, которые я нашел в Интернете, состоят в том lsb_release -r, что я не могу вывести это в переменную.

Есть ли способ получить текущую версию Ubuntu и сохранить ее как переменную в исполняемом файле оболочки?

a.mosallaei
источник
Да, я ценю это. Извините, я не знал, что есть документация по этому вопросу. Я все
равно
Да, я сделал это. Спасибо
a.mosallaei

Ответы:

21
Var=$(lsb_release -r)
echo "$Var"

Должен сделать свое дело.

Для числовой части только добавить это:

NumOnly=$(cut -f2 <<< "$Var")
echo "$NumOnly"

lsb-releaseФайл переменных

/usr/bin/lsb_releaseскрипт Python Это короткий скрипт, который служит хорошим введением в язык Python. Как уже упоминалось, более короткий способ получить только номер версии - с lsb_release -sr.

/etc/lsb-releaseФайл определяет переменные окружения с той же информацией , представленной lsb_release -aкомандой:

$ cat /etc/lsb-release
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=16.04
DISTRIB_CODENAME=xenial
DISTRIB_DESCRIPTION="Ubuntu 16.04.6 LTS"

Вы можете включить эти переменные окружения в любое время, используя . /etc/lsb-release. Чтобы проверить в своем терминале:

$ . /etc/lsb-release

$ echo $DISTRIB_RELEASE
16.04

$ echo $DISTRIB_DESCRIPTION
Ubuntu 16.04.6 LTS
WinEunuuchs2Unix
источник
так что да, спасибо, это работает, это выводит Release: 18.04. Однако есть ли способ просто получить номер? Я хочу иметь возможность использовать эту переменную в функции if / else в сценарии. Цель if / else - загрузить правильную версию моего приложения для дистрибутива Ubuntu.
a.mosallaei
Ах, неважно. @ user68186 решил мою проблему. Большое спасибо, ребята!
a.mosallaei
Я собирался написать ответ, но вы меня опередили! :-) Я рад внести свой вклад.
user68186
4
@ a.mosallaei Слово предостережения - если вы просто используете числовую часть и игнорируете все остальное, этот сценарий будет иметь странные результаты на любом компьютере, отличном от Ubuntu (включая многие дистрибутивы на основе Ubuntu, которые совместимы с Ubuntu) но есть свои имена и версии); Вам может потребоваться проверить, начинается ли результат lsb_release с «Ubuntu», прежде чем использовать число.
Петерис
1
@ a.mosallaei Вы говорите, что ваш исполняемый файл будет использоваться только на компьютерах с Ubuntu. Откуда ты это знаешь? Лучше иметь отказоустойчивый, который выходит, если дистрибутив не Ubuntu. Поверьте мне, пользователи будут пытаться сбить вашу программу.
Крыштоф Пиштек
11

Альтернатива - использовать /etc/os-releaseфайл. Это отформатировано как список переменных оболочки:

$ cat /etc/os-release 
NAME="Ubuntu"
VERSION="18.04.2 LTS (Bionic Beaver)"
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME="Ubuntu 18.04.2 LTS"
VERSION_ID="18.04"
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
VERSION_CODENAME=bionic
UBUNTU_CODENAME=bionic

Таким образом, простой способ разбора это просто sourceфайл:

$ . /etc/os-release

$ echo $NAME
Ubuntu

$ echo $VERSION
18.04.2 LTS (Bionic Beaver)

$ echo $PRETTY_NAME
Ubuntu 18.04.2 LTS


$ echo $VERSION_ID
18.04

Чтобы избежать ненужной установки всех этих переменных, вы можете поместить файл в подоболочку , вызвать нужную переменную и выйти из подоболочки:

$ ( . /etc/os-release ; echo $VERSION_ID)
18.04

Кроме того, вы всегда можете просто разобрать файл напрямую:

$ grep -oP 'VERSION_ID="\K[\d.]+' /etc/os-release 
18.04
terdon
источник
1
Обратите внимание, что для производных Ubuntu информация о версии может относиться к более поздней версии (например, у меня есть VERSION_ID = "18.3" и VERSION_CODENAME = "sylvia" для моего поля Mint). UBUNTU_CODENAME должен быть правильным, хотя.
Роджер Липскомб
subshell - самый надежный способ сделать это, верно?
JamesTheAwesomeDude
@JamesTheAwesomeDude, наверное, да.
тердон
8

Команда lsb_releaseподдерживает -s(или --short) параметр для вывода только запрашиваемой вами информации, а не заголовка, в котором указано, что это за информация.

Чтобы получить только номер версии, достаточно запустить:

lsb_release -sr

Например, на Ubuntu 18.04 LTS, это выводит:

18.04

Как и в случае с методом из ответа WinEunuuchs2Unix , все еще разумно использовать подстановку команд, чтобы назначить этот вывод переменной оболочки. Предположим, вы хотите, чтобы verпеременная содержала номер выпуска:

ver="$(lsb_release -sr)"

С -s, нет необходимости разобрать число с cut, sed, grep, awk, более сложными формами расширения параметров , или тому подобными.

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

Элия ​​Каган
источник
Да спасибо! Я никогда не понимал -s, но ты объяснил это прекрасно! Оценил
a.mosallaei
5

Короткие и простые lsb_releaseкоманды.

  • Только для печати версии

    lsb_release -sr

    Вывод:

    18.04
  • Распечатать описание

    lsb_release -sd

    Вывод:

    Ubuntu 18.04.2 LTS

О флагах, используемых здесь:

-s   show requested information in short format
-r   show release number of this distribution
-d   show description of this distribution
Kulfy
источник