Bash script – Variáveis de ambiente

Neste artigo sobre linguagem de programação BASH, vou tratar das variáveis de ambiente. Estas variáveis são muito importantes na programação com esta linguagem. Perceber a importância destas variáveis é fundamental para quem quer realmente saber programar em BASH.

Sempre que programamos algum tipo de software temos de ter em conta o ambiente onde ele é inserido. Trabalhar com BASH em Linux temos que ter consciência que estamos inseridos neste ambiente. Todos os sistema operativos têm variáveis de ambiente, o Linux não é excepção. Mas na maioria das distribuições Linux o BASH tem um papel fundamental, é utilizado desde o boot do sistema para inicializar serviços dinamicamente até à interface gráfica que utilizamos, bem como as sessões no terminal, isto em servidores bem como desktops.

Claro que para um sistema Linux funcionar em harmonia precisa partilhar informação entre os diversos softwares existentes no sistema. As variáveis de ambiente têm um papel fundamental pois guardam informação útil que outros serviços e processos precisão conhecer para trabalhar normalmente.

Em Linux os serviços quando arrancam tentam descobrir de diversas formas as propriedades que precisam conhecer. Por exemplo quando o Xorg que é o serviço que permite termos um ambiente de janelas como o Unity no Ubuntu ou qualquer outro arranca, este serviço configura a variável “DISPLAY” e exporta o que nos permite chamar o FireFox por exemplo na linha de comandos. Sem esta variável não seria possível chamar comandos com interface gráfica através do terminal.

Os nossos scripts também podem e devem tirar partido destas variáveis e até criar variáveis para partilhar com os sub-processos dos nossos scripts. Visto que estas variáveis são partilhadas de uma forma hierárquica, não podemos partilhar variáveis a processos que não arrancão através do ambiente que criamos. Mas quando chamamos o Firefox pela linha de comando ou por um script, nós podemos partilhar variáveis de ambiente com o Firefox, pois o Firefox arranca através do ambiente que criamos e o Firefox é um sub-processo do nosso script.

As variáveis de ambiente são importantes quando queremos que nossos scripts se insiram e entre ajam uns com os outros.

Neste artigo vou mostrar algumas variáveis de ambiente que são reservadas do BASH.

 

Variáveis de ambiente

Na tabela seguinte listo algumas variáveis que podemos encontrar já criadas e prontas a serem usadas caso seja útil aos nossos scripts.

 

variaveldefinição
HOMEEsta variável guarda o caminho da pasta pessoal do utilizador que está a executar o script, ou a usar o terminal.
IFSGuarda uma lista de caracteres que é utilizado para separar frases em argumentos ou linhas de texto. Falaremos mais deste assunto em outro artigo.
PATHEsta variável guarda os caminhos onde o bash procura os comandos externos para executar. Os caminhos são separados por dois pontos.
BASHGuarda o caminho completo onde está o binário do bash.
COLUMNSGuarda o numero de colunas que o terminal pode apresentar. Cada coluna pode apresentar um caractere. Se for mesmo em um terminal real é importante porque não é possível deslocar o texto para um lado e para outro sem um comando auxiliar. Portanto se tivermos muito texto para mostrar ao utilizador teremos que ter isto em conta.
EUIDGuarda o ID efectivo do utilizador que está a executar o script.
GROUPSÉ um array que guarda todos os grupos que o utilizador que está a correr o script pertence. Falarei dos arrays em outro artigo.
HOSTNAMEO nome da máquina onde está a executar.
HOSTTYPEEsta variável guarda a arquitectura da máquina que está a executar o script, i386, i686, etc.
LINESGuarda o numero de linhas que é possível escrever para o terminal de cada vez. O valor é recalculado se redimensionarmos a janela do terminal virtual. Se for mesmo em um terminal real é importante porque não é possível deslocar o texto para cima e para baixo sem um comando auxiliar. Portanto se tivermos muito texto para mostrar ao utilizador utilizamos o comando less ou more por exemplo.
MACHTYPEEsta variável guarda o tipo de máquina que está a executar o script. Por exemplo i686-pc-linux-gnu.
OLDPWDGuarda o valor do directório anterior, ela é actualizada pelo comando cd sempre que mudamos de directório.
OSTYPEEsta variável descreve o sistema operativo onde está a executar..
PPIDEsta variável guarda o ID do processo pelo qual o script está a executar.
PWDEsta variável guarda a directório corrente, onde estamos a trabalhar, é actualizada sempre que utilizamos o comando cd para mudar de directório.
RANDOMEsta variável guarda um numero aleatório entre 0 e 32767 sempre que esta variável for referida no script ela muda o seu valor automaticamente.
SECONDSEsta variável guarda o número de segundos desde que o script começou a executar, ou desde que abrimos o terminal.

Estas são apenas algumas variáveis de ambiente muitas outras existem. Isto também depende do sistema e da distribuição e da sua finalidade.

O que eu quero realmente passar com este artigo é que podemos utilizar e criar variáveis de ambiente para utilizar com os nossos scripts.

Os scripts deste artigo cobre a criação de variáveis e a sua exportação bem como a utilização  das variáveis já existentes no ambiente, que possibilita a sua utilização pelos sub-processos do script.

Neste script vou demonstrar como podemos ter acesso às variáveis de ambiente que poderíamos utilizar para coisas mais complexas, mas de momento vamos apenas escrever o seu conteúdo.

#!/bin/bash

# var_ambiente_ex_1.sh
# Este script escreve no ecrã o conteúdo de
# algumas variáveis de ambiente.

# Escrever o conteúdo da variável de ambiente HOME.
echo "O conteúdo da variável HOME é: $HOME"

# Escrever o conteúdo da variável de ambiente PATH.
echo "O conteúdo da variável PATH é: $PATH"

# Escrever o conteúdo da variável de ambiente BASH.
echo "O conteúdo da variável BASH é: $BASH"

# Escrever o conteúdo da variável de ambiente HOSTNAME.
echo "O conteúdo da variável HOSTNAME é: $HOSTNAME"

# Escrever o conteúdo da variável de ambiente USER.
echo "O conteúdo da variável USER é: $USER"

Executamos este script desta forma:

miguel@LUA:~/Scripts/bash$ ./var_ambiente_ex_1.sh 
O conteúdo da variável HOME é: /home/miguel
O conteúdo da variável PATH é: /usr/games:/usr/lib/lightdm/lightdm:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
O conteúdo da variável BASH é: /bin/bash
O conteúdo da variável HOSTNAME é: LUA
O conteúdo da variável USER é: miguel

Neste script vou criar duas variáveis e vou exportar com o comando export para o ambiente e vou chamar um sub script para ler as variáveis de ambiente exportadas.

#!/bin/bash

# var_ambiente_ex_2.sh
# Este script cria duas variáveis de ambiente
# e exporta para o ambiente para que sub scripts
# a possam acede-la.

# Criar duas variaveis.
mensagem1="Esta é a mensagem 1."
mensagem2="Esta é a mensagem 2."

# Exportar as variáveis para o ambiente
export mensagem1 mensagem2

# Como podemos ver neste script não é mandado
# escrever nada. Vamos chamar o script "var_ambiente_ex3.sh"
# que vai ler do ambiente e escrever no terminal.
# executar o  script
./var_ambiente_ex_3.sh

Este segundo script trata de ler as variáveis de ambiente exportadas pelo primeiro script.

#!/bin/bash

# var_ambiente_ex_3.sh
# Este script lê as variaveis de ambiente exportadas
# pelo script var_ambiente_ex_2.sh

# Ler as variáveis de ambiente que foram exportadas
echo "A mensagem 1 é: $mensagem1"
echo "A mensagem 2 é: $mensagem2

Executamos este script “var_ambiente_ex_2.sh” desta forma:

miguel@LUA:~/Scripts/bash$ ./var_ambiente_ex_2.sh 
A mensagem 1 é: Esta é a mensagem 1.
A mensagem 2 é: Esta é a mensagem 2.

Se executarmos o script “var_ambiente_ex_3.sh” não escreverá as mensagens pois não foram exportadas para o ambiente.

miguel@LUA:~/Scripts/bash$ ./var_ambiente_ex_3.sh 
A mensagem 1 é: 
A mensagem 2 é:

E como podemos ver pelos exemplos usar e exportar variáveis de ambiente não é nada complicado. Só temos de perceber bem estes conceitos para que possamos usa-los para fins mais complexos e mais úteis.

Pratiquem estes exemplos analisem os scripts com atenção a fim de perceber a lógica de funcionamento das variáveis de ambiente.

Para experimentar os scripts descarregue-os e guarde dentro de uma pasta dentro da sua pasta pessoal. Terá que lhes dar permissão de execução a todos eles. veja este exemplo de como fazer, terá que ajustar para o seu utilizador e a pasta onde guardou os scripts.

miguel@LUA:~$ cd Scripts/bash
miguel@LUA:~/Scripts/bash$ chmod +x *
miguel@LUA:~/Scripts/bash$ ./var_ambiente_ex_1.sh

Eu utilizo o utilizador miguel e tenho os scripts guardados em Scripts/bash

Duvidas e ideias que queiram discutir sobre BASH podem ser discutidas aqui.

Partilhem, comentem e experimentem!

Artigos Relacionados:

Deixe uma resposta