Pular para o conteúdo

Descobrir Distribuição Linux Automáticamente

Responder tópico
O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.
  • Denunciar
  • Indicar
01 02

1. Descobrir Distribuição Linux Automáticamente

Enviado em 29/08/2020 - 07:48h

Bom dia a todos.
Estou começando a aprender shell script.
Estou querendo criar uma rotina/função que descubra automaticamente qual distribuição linux está instalada.
O que eu já fiz:

1 #!/usr/bin/env bash
2
3 ###########################################################
4 ########## Função_DescobreDistribuiçãoLinux.bash ##########
5 ###########################################################
6
7 function DescobreDistribuicaoLinux {
8
9 descobredistribuicao=$(grep -o -a -m 1 -h "CentOS" teste.txt | cut -d':' -f2)
10 separei=$(echo $descobredistribuicao | cut -d' ' -f1)
11
12 }
13
14 cat /etc/*-release > teste.txt
15
16 DescobreDistribuicaoLinux
17
18 case "$separei" in
19 Ubuntu) echo "Sua distribuição é um Ubuntu"
20 ;;
21 CentOS) echo "Sua distribuição é um CentOS"
22 ;;
23 RedHat) echo "Sua distribuição é um Redhat"
24 ;;
25 Debian) echo "Sua distribuição é um Debian"
26 ;;
27 Fedora) echo "Sua distribuição é um Fedora"
28 ;;
29 *) echo "Não identifiquei qual é a sua distribuição"
30 ;;
31 esac
32
33 echo ""
34 echo ""
35
36 cat teste.txt

Como vocês podem ver, na linha 9, eu mando procurar o nome da distro dentro do arquivo teste.txt, faço um cut e este valor é atribuído a "descobredistribuicao".
Na linha 10 eu faço um echo em "descobredistribuicao" e novamente um cut, atribuindo a variável "separei".
Mas todo esse procedimento eu tenho que realizar manualmente, ou seja, eu tenho que definir na linha 9 dentro do grep, a distro que eu quero.
Como posso fazer isso de forma automática?
Qual estrutura de teste e repetição devo utilizar?

Responder tópico

O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

2. Re: Descobrir Distribuição Linux Automáticamente

Enviado em 29/08/2020 - 09:36h

Testaí:
#!/bin/bash
DISTRO=`sed -n '/^NAME/s/.*"\(.*\)"/\1/p' /etc/os-release`
echo "Você está usando a distro $DISTRO"

3. Minha Solução

Enviado em 29/08/2020 - 10:47h

#!/usr/bin/env bash

###########################################################
########## Função_DescobreDistribuiçãoLinux.bash ##########
###########################################################

function DescobreDistribuicaoLinux {
minhalista="Ubuntu CentOS RedHat Debian Fedora"

for indice in $minhalista
do

descobredistribuicao=$(grep -o -a -m 1 -h $indice teste.txt)
if [ "$descobredistribuicao" != "" ]
then
separei=$(echo $descobredistribuicao)
fi

done

echo "$separei"

if [ "$separei" = "Ubuntu" ]
then
echo "Sua distribuição é um Ubuntu!!!"
elif [ "$separei" = "CentOS" ]
then
echo "Sua distribuição é um CentOS!!!"
elif [ "$separei" = "RedHat" ]
then
echo "Sua distribuição é um RedHat!!!"
elif [ "$separei" = "Debian" ]
then
echo "Sua distribuição é um Debian!!!"
elif [ "$separei" = "Fedora" ]
then
echo "Sua distribuição é um Fedora!!!"
else
echo "Não reconheci qual é a sua distribuição !!!"
fi

}

cat /etc/*-release > teste.txt

DescobreDistribuicaoLinux

4. Re: Descobrir Distribuição Linux Automáticamente

Enviado em 29/08/2020 - 10:49h

Ryuk escreveu:

Testaí:
#!/bin/bash
DISTRO=`sed -n '/^NAME/s/.*"\(.*\)"/\1/p' /etc/os-release`
echo "Você está usando a distro $DISTRO"


Vlw, tentarei essa também


5. Re: Descobrir Distribuição Linux Automáticamente

Enviado em 29/08/2020 - 14:19h

O principal problema que eu vejo é que este comando não é muito preciso:
cat /etc/*-release


Em distros diferentes vai retornar muito texto indesejado.

Nas distros mais novas tem o arquivo /etc/os-release (já mencionado acima) que permite detectar de uma forma mais precisa.

Abaixo coloco um código de exemplo de como fazer apenas com bash puro, sem usar sed (contém sintaxe não tão óbvia de bash, mas como vc está aprendendo serve pra referencia de pesquisa):

#!/bin/bash

function DescobreDistribuicaoLinux() {
local arq_os_release="${1:-/etc/os-release}"

if [ ! -f "$arq_os_release" ]; then
echo "$FUNCNAME(): caminho '$arq_os_release' nao eh um arquivo" 1>&2
return 1
fi

local linha distro

while read linha; do
if [[ "$linha" == ID=* ]]; then
distro="${linha##*=}" # remove tudo depois antes do =
distro="${distro//\"}" # remove as aspas

break
fi
done < "$arq_os_release"

if [ -n "$distro" ]; then
echo "$distro"
else
echo "$FUNCNAME(): nao foi possivel detectar a distro" 1>&2
return 1
fi
}

6. Re: Descobrir Distribuição Linux Automáticamente

Enviado em 29/08/2020 - 14:40h

vmmello escreveu:

O principal problema que eu vejo é que este comando não é muito preciso:
cat /etc/*-release


Em distros diferentes vai retornar muito texto indesejado.

Nas distros mais novas tem o arquivo /etc/os-release (já mencionado acima) que permite detectar de uma forma mais precisa.

Abaixo coloco um código de exemplo de como fazer apenas com bash puro, sem usar sed (contém sintaxe não tão óbvia de bash, mas como vc está aprendendo serve pra referencia de pesquisa):

#!/bin/bash

function DescobreDistribuicaoLinux() {
local arq_os_release="${1:-/etc/os-release}"

if [ ! -f "$arq_os_release" ]; then
echo "$FUNCNAME(): caminho '$arq_os_release' nao eh um arquivo" 1>&2
return 1
fi

local linha distro

while read linha; do
if [[ "$linha" == ID=* ]]; then
distro="${linha##*=}" # remove tudo depois antes do =
distro="${distro//\"}" # remove as aspas

break
fi
done < "$arq_os_release"

if [ -n "$distro" ]; then
echo "$distro"
else
echo "$FUNCNAME(): nao foi possivel detectar a distro" 1>&2
return 1
fi
}


Vlw o retorno.

7. Re: Descobrir Distribuição Linux Automáticamente

Enviado em 30/08/2020 - 00:33h


mdunguel escreveu:

Bom dia a todos.
Estou começando a aprender shell script.
Estou querendo criar uma rotina/função que descubra automaticamente qual distribuição linux está instalada.
O que eu já fiz:

1 #!/usr/bin/env bash
2
3 ###########################################################
4 ########## Função_DescobreDistribuiçãoLinux.bash ##########
5 ###########################################################
6
7 function DescobreDistribuicaoLinux {
8
9 descobredistribuicao=$(grep -o -a -m 1 -h "CentOS" teste.txt | cut -d':' -f2)
10 separei=$(echo $descobredistribuicao | cut -d' ' -f1)
11
12 }
13
14 cat /etc/*-release > teste.txt
15
16 DescobreDistribuicaoLinux
17
18 case "$separei" in
19 Ubuntu) echo "Sua distribuição é um Ubuntu"
20 ;;
21 CentOS) echo "Sua distribuição é um CentOS"
22 ;;
23 RedHat) echo "Sua distribuição é um Redhat"
24 ;;
25 Debian) echo "Sua distribuição é um Debian"
26 ;;
27 Fedora) echo "Sua distribuição é um Fedora"
28 ;;
29 *) echo "Não identifiquei qual é a sua distribuição"
30 ;;
31 esac
32
33 echo ""
34 echo ""
35
36 cat teste.txt

Como vocês podem ver, na linha 9, eu mando procurar o nome da distro dentro do arquivo teste.txt, faço um cut e este valor é atribuído a "descobredistribuicao".
Na linha 10 eu faço um echo em "descobredistribuicao" e novamente um cut, atribuindo a variável "separei".
Mas todo esse procedimento eu tenho que realizar manualmente, ou seja, eu tenho que definir na linha 9 dentro do grep, a distro que eu quero.
Como posso fazer isso de forma automática?
Qual estrutura de teste e repetição devo utilizar?

Descomplicando:
echo "A distro Usada é: $(uname -n|sed 's/./\U&/')" 

+ curto
echo "A distro Usada é: $(uname -n)" 


______________________________________________________________________
Importante: echo -e "\n$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')\n"
Att.: Marcelo Oliver
______________________________________________________________________

8. Re: Descobrir Distribuição Linux Automáticamente

Enviado em 30/08/2020 - 00:35h


msoliver escreveu:


mdunguel escreveu:

Bom dia a todos.
Estou começando a aprender shell script.
Estou querendo criar uma rotina/função que descubra automaticamente qual distribuição linux está instalada.
O que eu já fiz:

1 #!/usr/bin/env bash
2
3 ###########################################################
4 ########## Função_DescobreDistribuiçãoLinux.bash ##########
5 ###########################################################
6
7 function DescobreDistribuicaoLinux {
8
9 descobredistribuicao=$(grep -o -a -m 1 -h "CentOS" teste.txt | cut -d':' -f2)
10 separei=$(echo $descobredistribuicao | cut -d' ' -f1)
11
12 }
13
14 cat /etc/*-release > teste.txt
15
16 DescobreDistribuicaoLinux
17
18 case "$separei" in
19 Ubuntu) echo "Sua distribuição é um Ubuntu"
20 ;;
21 CentOS) echo "Sua distribuição é um CentOS"
22 ;;
23 RedHat) echo "Sua distribuição é um Redhat"
24 ;;
25 Debian) echo "Sua distribuição é um Debian"
26 ;;
27 Fedora) echo "Sua distribuição é um Fedora"
28 ;;
29 *) echo "Não identifiquei qual é a sua distribuição"
30 ;;
31 esac
32
33 echo ""
34 echo ""
35
36 cat teste.txt

Como vocês podem ver, na linha 9, eu mando procurar o nome da distro dentro do arquivo teste.txt, faço um cut e este valor é atribuído a "descobredistribuicao".
Na linha 10 eu faço um echo em "descobredistribuicao" e novamente um cut, atribuindo a variável "separei".
Mas todo esse procedimento eu tenho que realizar manualmente, ou seja, eu tenho que definir na linha 9 dentro do grep, a distro que eu quero.
Como posso fazer isso de forma automática?
Qual estrutura de teste e repetição devo utilizar?

Descomplicando:
echo "A distro Usada é: $(uname -n|sed 's/./\U&/')" 

+ curto
echo "A distro Usada é: $(uname -n)" 


______________________________________________________________________
Importante: echo -e "\n$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')\n"
Att.: Marcelo Oliver
______________________________________________________________________


"uname -n" só retorna o hostname, se o usuário mudar não vai bater com o nome da distro.

9. Re: Descobrir Distribuição Linux Automáticamente

Enviado em 30/08/2020 - 01:23h


pylm escreveu:


msoliver escreveu:


mdunguel escreveu:

Bom dia a todos.
Estou começando a aprender shell script.
Estou querendo criar uma rotina/função que descubra automaticamente qual distribuição linux está instalada.
O que eu já fiz:

1 #!/usr/bin/env bash
2
3 ###########################################################
4 ########## Função_DescobreDistribuiçãoLinux.bash ##########
5 ###########################################################
6
7 function DescobreDistribuicaoLinux {
8
9 descobredistribuicao=$(grep -o -a -m 1 -h "CentOS" teste.txt | cut -d':' -f2)
10 separei=$(echo $descobredistribuicao | cut -d' ' -f1)
11
12 }
13
14 cat /etc/*-release > teste.txt
15
16 DescobreDistribuicaoLinux
17
18 case "$separei" in
19 Ubuntu) echo "Sua distribuição é um Ubuntu"
20 ;;
21 CentOS) echo "Sua distribuição é um CentOS"
22 ;;
23 RedHat) echo "Sua distribuição é um Redhat"
24 ;;
25 Debian) echo "Sua distribuição é um Debian"
26 ;;
27 Fedora) echo "Sua distribuição é um Fedora"
28 ;;
29 *) echo "Não identifiquei qual é a sua distribuição"
30 ;;
31 esac
32
33 echo ""
34 echo ""
35
36 cat teste.txt

Como vocês podem ver, na linha 9, eu mando procurar o nome da distro dentro do arquivo teste.txt, faço um cut e este valor é atribuído a "descobredistribuicao".
Na linha 10 eu faço um echo em "descobredistribuicao" e novamente um cut, atribuindo a variável "separei".
Mas todo esse procedimento eu tenho que realizar manualmente, ou seja, eu tenho que definir na linha 9 dentro do grep, a distro que eu quero.
Como posso fazer isso de forma automática?
Qual estrutura de teste e repetição devo utilizar?

Descomplicando:
echo "A distro Usada é: $(uname -n|sed 's/./\U&/')" 

+ curto
echo "A distro Usada é: $(uname -n)" 


______________________________________________________________________
Importante: echo -e "\n$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')\n"
Att.: Marcelo Oliver
______________________________________________________________________


"uname -n" só retorna o hostname, se o usuário mudar não vai bater com o nome da distro.


Errei, desculpe ai pessoal....
uname -v
#1 SMP Debian 4.19.118-2 (2020-04-29)

______________________________________________________________________
Importante: echo -e "\n$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')\n"
Att.: Marcelo Oliver
______________________________________________________________________

10. Re: Descobrir Distribuição Linux Automáticamente

Enviado em 30/08/2020 - 01:27h

mdunguel escreveu:

Bom dia a todos.
Estou começando a aprender shell script.
Estou querendo criar uma rotina/função que descubra automaticamente qual distribuição linux está instalada.
O que eu já fiz:

1 #!/usr/bin/env bash
2
3 ###########################################################
4 ########## Função_DescobreDistribuiçãoLinux.bash ##########
5 ###########################################################
6
7 function DescobreDistribuicaoLinux {
8
9 descobredistribuicao=$(grep -o -a -m 1 -h "CentOS" teste.txt | cut -d':' -f2)
10 separei=$(echo $descobredistribuicao | cut -d' ' -f1)
11
12 }
13
14 cat /etc/*-release > teste.txt
15
16 DescobreDistribuicaoLinux
17
18 case "$separei" in
19 Ubuntu) echo "Sua distribuição é um Ubuntu"
20 ;;
21 CentOS) echo "Sua distribuição é um CentOS"
22 ;;
23 RedHat) echo "Sua distribuição é um Redhat"
24 ;;
25 Debian) echo "Sua distribuição é um Debian"
26 ;;
27 Fedora) echo "Sua distribuição é um Fedora"
28 ;;
29 *) echo "Não identifiquei qual é a sua distribuição"
30 ;;
31 esac
32
33 echo ""
34 echo ""
35
36 cat teste.txt

Como vocês podem ver, na linha 9, eu mando procurar o nome da distro dentro do arquivo teste.txt, faço um cut e este valor é atribuído a "descobredistribuicao".
Na linha 10 eu faço um echo em "descobredistribuicao" e novamente um cut, atribuindo a variável "separei".
Mas todo esse procedimento eu tenho que realizar manualmente, ou seja, eu tenho que definir na linha 9 dentro do grep, a distro que eu quero.
Como posso fazer isso de forma automática?
Qual estrutura de teste e repetição devo utilizar?


Quanto ao laço de repetição:
#!/usr/bin/env bash
distros=(Ubuntu CentOS RedHat Debian Fedora openSUSE "Arch Linux" "Gentoo Linux")

function PegaDistro {
cat /etc/os-release > teste.txt
for X in "${distros[@]}";do
if grep -ioq -m1 "$X" teste.txt;then
echo "Sua distribuição é: "$X"";
fi;
done
}
PegaDistro


Sem o laço:
var="(Ubuntu|CentOS|RedHat|Debian|Fedora|openSUSE|Arch Linux|Gentoo Linux|Slackware)";
echo "Instalado o Linux: $(grep -Eoi -m1 "${var}" teste.txt)"
Instalado o Linux: Debian


______________________________________________________________________
Importante: echo -e "\n$(lynx --dump goo.gl/a9KeFc|sed -nr '/^[ ]+Se/,/dou.$/p')\n"
Att.: Marcelo Oliver
______________________________________________________________________

11. Re: Descobrir Distribuição Linux Automáticamente

Enviado em 30/08/2020 - 09:49h

Eu costumo fazer assim:
#!/bin/bash

echo "Distribuicao: $(lsb_release -si)"
echo " Detalhes: $(lsb_release -sd)"

12. Re: Descobrir Distribuição Linux Automáticamente

Enviado em 30/08/2020 - 10:04h

cat /etc/*-release | grep 'NAME="' | cut -d= -f2 | head -n 1 | cut -d '"' -f2 


CPU i5-8400 GTX 750 SofRaid 4xSSD 16GB DDR4 mesmo assim uso Lubuntu.
01 02

Responder tópico

O Viva o Linux depende da receita de anúncios para se manter. Ative os cookies aqui para nos patrocinar.
Não conseguimos carregar os anúncios. Se usa bloqueador, considere liberar o Viva o Linux para nos patrocinar.

Responder tópico

Entre na sua conta para responder.

Fazer login para responder