Comment pouvez-vous indiquer la version d'Ubuntu sur un système dans un script .sh (bash)?

9

J'essaie donc de créer un bash / exécutable, et j'ai besoin de connaître le numéro de version d'Ubuntu sur le système. Toutes les façons dont j'ai trouvé en ligne consistent lsb_release -r, mais je ne peux pas les afficher dans une variable.

Existe-t-il un moyen d'obtenir la version actuelle d'Ubuntu et de l'enregistrer en tant que variable dans un exécutable shell?

a.mosallaei
la source
Oui, je l'apprécie. Désolé, je ne savais pas qu'il y avait de la documentation à ce sujet. Je l'apprécie quand même
a.mosallaei
Oui, je l'ai fait. Merci
a.mosallaei

Réponses:

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

Devrait faire l'affaire.

Pour la partie numérique, ajoutez seulement ceci:

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

Le lsb-releasefichier des variables

/usr/bin/lsb_releaseest un script Python. C'est un court script qui sert de bonne introduction au langage python. Comme d'autres l'ont mentionné, un moyen plus court d'obtenir uniquement le numéro de version est d'utiliser lsb_release -sr.

Le /etc/lsb-releasefichier définit les variables d'environnement avec les mêmes informations fournies par la lsb_release -acommande:

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

Vous pouvez inclure ces variables d'environnement à tout moment à l'aide de . /etc/lsb-release. Pour tester dans votre terminal:

$ . /etc/lsb-release

$ echo $DISTRIB_RELEASE
16.04

$ echo $DISTRIB_DESCRIPTION
Ubuntu 16.04.6 LTS
WinEunuuchs2Unix
la source
alors oui merci, ça marche, ça sort Release: 18.04. Mais existe-t-il un moyen d'obtenir simplement le numéro? Je veux pouvoir utiliser cette variable dans une fonction if / else du script. Le but de if / else est de télécharger la version correcte de mon application pour la distribution d'ubuntu.
a.mosallaei
Ah laisse tomber. @ user68186 a résolu mon problème. Merci beaucoup les gars!
a.mosallaei
J'allais écrire la réponse mais tu m'as battu! :-) Je suis heureux de contribuer.
user68186
4
@ a.mosallaei un mot d'avertissement - si vous utilisez simplement la partie numérique et ignorez tout le reste, ce script va avoir des résultats étranges sur toute machine non Ubuntu (y compris de nombreuses distributions basées sur Ubuntu qui sont "compatibles" avec Ubuntu) mais ont leurs propres noms et versions); vous devrez peut-être vérifier si le résultat lsb_release commence par «Ubuntu» avant d'utiliser le numéro.
Peteris
1
@ a.mosallaei Vous dites que votre exécutable ne sera utilisé que sur les ordinateurs Ubuntu. Comment sais-tu ça? Il est préférable d'avoir une sécurité intégrée qui se termine si la distribution n'est pas Ubuntu. Croyez-moi, les utilisateurs essaieront de planter votre programme.
Kryštof Píštěk
11

Une alternative consiste à utiliser le /etc/os-releasefichier à la place. Ceci est formaté comme une liste de variables 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

Donc, une façon simple de l'analyser est de simplement sourcele fichier:

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

Pour éviter de définir toutes ces variables inutilement, vous pouvez source le fichier dans un sous - shell , faire écho à la variable dont vous avez besoin et quitter le sous-shell:

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

Alternativement, vous pouvez toujours analyser directement le fichier:

$ grep -oP 'VERSION_ID="\K[\d.]+' /etc/os-release 
18.04
terdon
la source
1
Notez que pour les dérivés Ubuntu, les informations de version peuvent faire référence à la version en aval (par exemple, j'ai VERSION_ID = "18.3" et VERSION_CODENAME = "sylvia" pour ma boîte Mint). UBUNTU_CODENAME devrait être correct, cependant.
Roger Lipscombe
sous-shell est le moyen le plus robuste de le faire, non?
JamesTheAwesomeDude
@JamesTheAwesomeDude probablement, oui.
terdon
8

La lsb_releasecommande prend en charge une option -s(ou --short) pour imprimer uniquement les informations que vous demandez et non l'en-tête qui indique le type d'informations.

Pour obtenir uniquement le numéro de version, il suffit donc d'exécuter:

lsb_release -sr

Par exemple, sur Ubuntu 18.04 LTS, cela génère:

18.04

Comme avec la méthode dans la réponse de WinEunuuchs2Unix , il est toujours raisonnable d'utiliser la substitution de commandes pour affecter cette sortie à une variable shell. Supposons que vous vouliez que la vervariable contienne le numéro de version:

ver="$(lsb_release -sr)"

Avec -s, il n'y a pas besoin d'analyser le nombre avec cut, sed, grep, awk, des formes plus complexes de l' expansion des paramètres , ou similaires.

Dans cette utilisation, les " "guillemets sont facultatifs, mais je suggère généralement de citer l' expansion des paramètres et d'autres extensions du shell, sauf lorsqu'il y a une raison de ne pas le faire.

Eliah Kagan
la source
Oui merci! Je n'ai jamais compris le -s, mais tu l'as parfaitement expliqué! Apprécié
a.mosallaei
5

lsb_releaseCommandes courtes et simples .

  • Pour imprimer uniquement la version

    lsb_release -sr

    Production:

    18.04
  • Pour imprimer la description

    lsb_release -sd

    Production:

    Ubuntu 18.04.2 LTS

À propos des drapeaux utilisés ici:

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