Descobrir Distribuição Linux Automáticamente

1. Descobrir Distribuição Linux Automáticamente

Marcos Vinícius Dunguel Nunes
mdunguel

(usa Debian)

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?


  


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

Ryuk Shinigami
Ryuk

(usa Nenhuma)

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

Marcos Vinícius Dunguel Nunes
mdunguel

(usa Debian)

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

Marcos Vinícius Dunguel Nunes
mdunguel

(usa Debian)

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

Vinicius Mello
vmmello

(usa Slackware)

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

Marcos Vinícius Dunguel Nunes
mdunguel

(usa Debian)

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

Marcelo Oliver
msoliver

(usa Debian)

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

Matheus
pylm

(usa Gentoo)

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

Marcelo Oliver
msoliver

(usa Debian)

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

Marcelo Oliver
msoliver

(usa Debian)

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

Adriano Siqueira
adrisiq

(usa elementary OS)

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

João Cláudio de Alcântara
aguamole

(usa Lubuntu)

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



Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner
Linux banner
Linux banner

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts