web-dev-qa-db-fra.com

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

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. Tous les moyens que j'ai trouvés en ligne consistent en lsb_release -r, mais je ne peux pas produire cela 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?

9
a.mosallaei
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-release fichier de variables

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

Le /etc/lsb-release Le fichier définit les variables d'environnement avec les mêmes informations fournies par le lsb_release -a commande:

$ 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
21
WinEunuuchs2Unix

Une alternative consiste à utiliser le /etc/os-release fichier à 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 source le 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 subshell , 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 simplement analyser le fichier directement:

$ grep -oP 'VERSION_ID="\K[\d.]+' /etc/os-release 
18.04
11
terdon

Le lsb_release commande prend en charge un -s (ou --short) option pour imprimer uniquement les informations que vous demandez et non l'en-tête qui indique de quel type d'informations il s'agit.

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 réponse de WinEunuuchs2Unix , il est toujours raisonnable d'utiliser substitution de commande pour affecter cette sortie à une variable Shell. Supposons que vous vouliez que la variable ver contienne le numéro de version:

ver="$(lsb_release -sr)"

Avec -s, il n'est pas nécessaire d'analyser le nombre avec cut , sed , grep , awk , formes plus complexes de expansion des paramètres , ou similaire.

Dans cet usage, le "" quotes sont facultatifs, mais je suggère généralement de citer expansion des paramètres et autres extensions du shell sauf quand il y a une raison de ne pas le faire.

8
Eliah Kagan

Court et simple lsb_release commandes.

  • 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
5
Kulfy