.sh (bash) 스크립트로 시스템의 Ubuntu 버전을 어떻게 알 수 있습니까?


9

그래서 bash / 실행 파일을 만들려고하는데 시스템의 Ubuntu 버전 번호를 알아야합니다. 온라인에서 찾은 모든 방법은로 구성되어 lsb_release -r있지만 변수로 출력 할 수는 없습니다.

Ubuntu의 현재 버전을 가져 와서 쉘 실행 파일에 변수로 저장하는 방법이 있습니까?


예, 감사합니다. 죄송합니다, 이것에 대한 문서가 있다는 것을 몰랐습니다. 어쨌든
고맙습니다

그렇습니다. 감사합니다
a.mosallaei

답변:


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

트릭을해야합니다.

숫자 부분에만 다음을 추가하십시오.

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

lsb-release변수 파일

/usr/bin/lsb_release파이썬 스크립트입니다. 파이썬 언어를 잘 소개하는 짧은 스크립트입니다. 다른 사람들이 언급했듯이 버전 번호를 얻는 더 짧은 방법은입니다 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

예, 감사합니다 Release: 18.04. 작동합니다 . 출력 합니다. 그러나 숫자를 얻는 방법이 있습니까? 스크립트의 if / else 함수에서이 변수를 사용할 수 있기를 원합니다. if / else의 목적은 우분투 배포판에 맞는 올바른 버전의 응용 프로그램을 다운로드하는 것입니다.
a.mosallaei

아 신경 쓰지 마 @ user68186이 내 문제를 해결했습니다. 정말 고마워요!
a.mosallaei

나는 답을 쓰려고했지만 너는 나를 이겼다! :-) 기꺼이 공헌합니다.
user68186

4
@ a.mosallaei 한마디 경고-숫자 부분 만 사용하고 다른 모든 것을 무시하는 경우이 스크립트는 우분투 시스템과 우분투 "호환되는 많은 우분투 기반 배포판을 포함하여 모든 이상한 결과를냅니다. 그러나 자신의 이름과 버전이 있습니다); 번호를 사용하기 전에 lsb_release 결과가 "Ubuntu"로 시작하는지 확인해야합니다.
Peteris

1
@ a.mosallaei 실행 파일은 Ubuntu 컴퓨터에서만 사용된다고 말합니다. 어떻게 알았어? 배포판이 우분투가 아닌 경우 종료되는 안전 장치를 사용하는 것이 좋습니다. 날 믿어, 사용자가 프로그램을 중단하려고합니다.
Kryštof Píštěk

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

1
Ubuntu 파생 상품의 경우 버전 정보가 다운 스트림 버전을 참조 할 수 있습니다 (예 : 민트 상자에 VERSION_ID = "18.3"및 VERSION_CODENAME = "sylvia"가 있음). UBUNTU_CODENAME은 정확해야합니다.
Roger Lipscombe

서브 쉘이 가장 강력한 방법입니다.
JamesTheAwesomeDude

아마 @JamesTheAwesomeDude 일 것입니다.
terdon

8

lsb_release명령은 -s(또는 --short) 옵션을 지원 하여 정보의 종류를 나타내는 헤더가 아닌 요청한 정보 만 인쇄합니다.

버전 번호 만 얻으려면 다음과 같이 실행하면 충분합니다.

lsb_release -sr

예를 들어 Ubuntu 18.04 LTS에서는 다음과 같이 출력됩니다.

18.04

WinEunuuchs2Unix 's answer 의 메소드와 마찬가지로 명령 대체 를 사용 하여이 출력을 쉘 변수에 지정 하는 것이 여전히 합리적 입니다. ver변수가 릴리스 번호를 보유 하기를 원한다고 가정하십시오 .

ver="$(lsb_release -sr)"

을 사용하면을 사용 -s하여 숫자를 파싱 할 필요가 없습니다 cut.sed , grep, awk,의 더 복잡한 형태의 매개 변수 확장 등이.

이 사용법에서 " "따옴표 는 선택 사항이지만 일반적으로 인용 매개 변수 확장을 제안합니다 하지 않는 이유를 제외하고 및 기타 셸 확장을 합니다.


네 감사합니다! 나는 -s를 이해하지 못했지만, 당신은 그것을 완벽하게 설명했습니다! 감사
a.mosallaei 19

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
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.