¿Cómo puede saber la versión de Ubuntu en un sistema en un script .sh (bash)?

9

Así que estoy tratando de crear un bash / ejecutable, y necesito saber el número de versión de Ubuntu en el sistema. Todas las formas en que he encontrado en línea consisten lsb_release -r, sin embargo, no puedo mostrar esto en una variable.

¿Hay alguna forma de obtener la versión actual de Ubuntu y guardarla como una variable en un ejecutable de shell?

a.mosallaei
fuente
Sí, lo aprecio. Lo siento, no sabía que había documentación sobre esto. De todos modos lo aprecio
a.mosallaei
Sí lo he hecho. Gracias
a.mosallaei

Respuestas:

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

Debería hacer el truco.

Para la porción numérica solo agregue esto:

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

El lsb-releasearchivo de variables

/usr/bin/lsb_releasees un script de Python Es un script corto que sirve como una buena introducción al lenguaje python. Como otros mencionaron, una forma más corta de obtener solo el número de versión es con lsb_release -sr.

El /etc/lsb-releasearchivo define variables ambientales con la misma información provista por el lsb_release -acomando:

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

Puede incluir estas variables de entorno en cualquier momento utilizando . /etc/lsb-release. Para probar en su terminal:

$ . /etc/lsb-release

$ echo $DISTRIB_RELEASE
16.04

$ echo $DISTRIB_DESCRIPTION
Ubuntu 16.04.6 LTS
WinEunuuchs2Unix
fuente
así que sí, gracias, funciona, sale Release: 18.04. Sin embargo, ¿hay alguna manera de obtener el número? Quiero poder usar esta variable en una función if / else en el script. El propósito de if / else es descargar la versión correcta de mi aplicación para la distribución de ubuntu.
a.mosallaei
Ah no importa. @ user68186 resolvió mi problema. Muchas gracias chicos!
a.mosallaei
¡Iba a escribir la respuesta pero me ganaste! :-) Estoy feliz de contribuir.
user68186
44
@ a.mosallaei una advertencia: si solo está usando la parte del número e ignorando todo lo demás, este script tendrá resultados extraños en cualquier máquina que no sea Ubuntu (incluidas muchas distribuciones basadas en Ubuntu que son "compatibles" con Ubuntu pero tienen sus propios nombres y versiones); es posible que deba verificar si el resultado lsb_release comienza con "Ubuntu" antes de usar el número.
Peteris
1
@ a.mosallaei Usted dice que su ejecutable solo se usará en computadoras Ubuntu. ¿Como sabes eso? Es mejor tener un sistema a prueba de fallos que salga si la distribución no es Ubuntu. Confía en mí, los usuarios intentarán bloquear tu programa.
Kryštof Píštěk
11

Una alternativa es usar el /etc/os-releasearchivo en su lugar. Esto está formateado como una lista de variables de shell:

$ 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

Entonces, una manera fácil de analizarlo es simplemente sourceel archivo:

$ . /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

Para evitar establecer todas estas variables innecesariamente, puede obtener el archivo en una subshell , repetir la variable que necesita y salir de la subshell:

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

Alternativamente, siempre puede analizar el archivo directamente:

$ grep -oP 'VERSION_ID="\K[\d.]+' /etc/os-release 
18.04
terdon
fuente
1
Tenga en cuenta que para los derivados de Ubuntu, la información de la versión puede referirse a la versión posterior (por ejemplo, tengo VERSION_ID = "18.3" y VERSION_CODENAME = "sylvia" para mi cuadro Mint). Sin embargo, UBUNTU_CODENAME debería ser correcto.
Roger Lipscombe
subshell es la forma más sólida de hacer esto, ¿verdad?
JamesTheAwesomeDude
@JamesTheAwesomeDude probablemente, sí.
terdon
8

El lsb_releasecomando admite una opción -s(o --short) para imprimir solo la información que solicita y no el encabezado que dice qué tipo de información es.

Para obtener solo el número de versión, es suficiente ejecutar:

lsb_release -sr

Por ejemplo, en Ubuntu 18.04 LTS, eso genera:

18.04

Al igual que con el método en la respuesta de WinEunuuchs2Unix , todavía es razonable usar la sustitución de comandos para asignar esta salida a una variable de shell. Supongamos que desea que la vervariable contenga el número de versión:

ver="$(lsb_release -sr)"

Con -s, no hay necesidad de analizar el número con cut, sed, grep, awk, formas más complejas de la expansión de parámetros , o similares.

En este uso, las " "comillas son opcionales, pero generalmente sugiero citar la expansión de parámetros y otras expansiones de shell, excepto cuando hay una razón para no hacerlo.

Eliah Kagan
fuente
¡Si, gracias! Nunca entendí los -s, ¡pero lo explicaste perfectamente! Apreciado
a.mosallaei
5

lsb_releaseComandos cortos y simples .

  • Para imprimir solo la versión

    lsb_release -sr

    Salida:

    18.04
  • Imprimir descripción

    lsb_release -sd

    Salida:

    Ubuntu 18.04.2 LTS

Sobre las banderas utilizadas aquí:

-s   show requested information in short format
-r   show release number of this distribution
-d   show description of this distribution
Kulfy
fuente