Qualquer shell que estiver ativa, funcionando no momento, guarda informações que precisam ser usadas a cada momento, mais ou menos vezes. Isto é o que chamamos de variáveis de ambiente. As variáveis de ambiente 'guardam' informações tais como endereços de arquivos e diretórios, arquivos de configuração, etc.
Também podem guardar informações valiosas para o funcionamento da própria shell, como o tamanho de sua lista de histórico, qual seu sistema operacional, entre muitos outros. Para ver as variáveis de ambiente da sua shell no momento, use o comando '
declare' (estamos usando a shell 'bash'):
$ declare | less
A linha acima permitirá ler a saída do comando 'declare' com calma, graças ao comando less. Esta linha também mostrará além das variáveis de ambiente, as funções.
Você pode indicar o valor da variável, e não a variável em si, por usar o símbolo '$'. Por exemplo:
$ echo $SALARIO
2500
O comando acima imprimiu na tela o conteúdo, ou valor, da variável SALARIO.
Exemplos de variáveis de ambiente
Quando iniciamos uma shell, várias variáveis de ambientes são inicializadas. Veja algumas delas e uma breve descrição.
- BASH: Contém o caminho completo do comando bash. Provavelmente, '/bin/bash'.
- FCEDIT: Se alterada, indica o editor de texto usado pelo comando 'fc' para editar comandos do 'history'. Se não for alterada, o editor usado será o vi.
- HISTFILE: Indica o endereço do seu histórico da shell. Normalmente, '$HOME/.bash_history'.
- HISTFILE: O número de entradas do histórico. O padrão é 1000.
- HOME: É o seu diretório home. Todas as vezes que usar o comando 'cd' sem nenhuma opção, será 'enviado' para o diretório indicado no conteúdo de HOME.
- HOSTTYPE: Descreve a arquitetura do computador no qual seu sistema está rodando.
- MAIL: O endereço de sua caixa de correio.
- OSTYPE: Identifica o sistema operacional em uso.
- PATH: É a lista dos diretórios usados para encontrar os comandos que você digita. O padrão, para usuários comuns, é /bin:/usr/bin:/usr/local/bin:/usr/bin/X11:/usr:/usr/X11R6/bin:~/bin. Note que os dois pontos (:) estão separando os diversos diretórios utilizados. Para o usuário root, também estão presentes /sbin, /usr/sbin/, /usr/local/sbin.
[1] Comentário enviado por
adrianoturbo em 22/08/2007 - 11:05h:
Parabéns brother bem interessante a questão de utilizar as variáveis de ambiente mesmo porque elas ficam armazenadas no terminal facilitando ainda mais a nossa vida ,já pensou ter que ficar redigitando vários comandos ?
Parabéns !
Abraços.
[2] Comentário enviado por
elgio em 22/08/2007 - 11:30h:
Só uma correção:
HISTFILE: Ok, nome do arquivo do HISTORY
HISTSIZE: Quantidade de comandos guardadas na memória
HISTFILESIZE: Quantidade de comandos armazenadas no arquivo
[3] Comentário enviado por
tenchi em 22/08/2007 - 14:25h:
Só lembrando que uma variável de ambiente normalmente pode ser utilizada em processos-filho. Para isso, deve-se "exportá-la":
$ export DISPLAY=:0.2
E assim vai...
[4] Comentário enviado por
elgio em 22/08/2007 - 14:31h:
Que tal um desafio?
Porque a variavel usuario não fica com o valor:
usuario=0
cat /etc/passwd|while read linha
do
if echo $linha|grep -qs root
then
usuario=$linha
echo "Achei root. Var usuario tem $usuario"
break
fi
done
echo "Final do laco. Var usuario tem $usuario"
Podia ter uma sessão aqui no Vol de desafios...
hehehehe
PS: Eu sei a resposta.
[5] Comentário enviado por
tenchi em 23/08/2007 - 09:26h:
Se é isso que vc quer elgio, substitua o while do tipo:
while read linha
do
(...)
done < <(cat /etc/passwd)
O pipe abre o que chamamos de subshell, e assim vai...
;-)
[6] Comentário enviado por
elgio em 23/08/2007 - 09:31h:
hehehe. Exato!
Há uns dois anos tomei um pau por causa disto!
Até que descobri que o pipe cria um sub-shell com novas variáveis.
Tche, eu sempre considerei isto meio que um bug do bash, pois é intuitivo tu fazer isto e querer que o resultado seja o esperado. Mas...
[]'s
[7] Comentário enviado por
edupooter em 23/08/2007 - 11:18h:
Por gentileza,
Como posso usar o resultado do comando "date" no formato hh:mm para comparar esse valor com um intervalo de tempo, como: entre as 23h40 até as 06h00 do outro?
Seria como assim?
#!/bin/sh
if %date >=23:40 && %date <=06:00
then halt
fi
[8] Comentário enviado por
tenchi em 23/08/2007 - 13:39h:
UHauhau
Elgio, eu aprendi isso esses dias. Já havia visto no curso de bash q tem no site do julioneves (julioneves.com), aí esses tempos atrás ele veio aqui an minah cidade e palestrou um mini-curso. Foi aí que eu realmente entendi como realmente funciona esse negócio....
E edupooter, tente isso:
if (($(date +%H%M)>=2300)) && (($(date +%H%M)<=0600))
then
halt
fi
É meio bizarro mas funciona...
[9] Comentário enviado por
elgio em 23/08/2007 - 14:11h:
Acho que não funciona.
0500 (cinco da manhã) deveria casar, mas não é MAIOR que 2340.
Trocando o && por || ?
if (($(date +%H%M)>=2340)) || (($(date +%H%M)<=600))
then
halt
fi
Mas ainda não sei. Teria que testar.
Ah, e em operações aritméticas do BASH, se um número começa com 0 é octal!
if (( 11 > 012 )); then echo OK;fi
Vai imprimir OK, porque 012 em octal significa 10 em decimal!!
[10] Comentário enviado por
elgio em 23/08/2007 - 14:32h:
Testei.
AGORA=$(date "+%k%M"); if (( $AGORA >= 2340 || $AGORA <= 600 )); then echo Bateu; fi
%k retorna sem o ZERO (que iria COMPLICAR). Vai retornar 600 e não 0600
para seis da manhã.
[11] Comentário enviado por
tenchi em 23/08/2007 - 16:36h:
Hum elgio. essa do octal eu não sabia.. hauahua
Eu nem interpretei a lógica do que ele queria, só passei um jeito de fazer... Mas acabei me ferrando nessa de octal...
- Como que faz para disparar essa arma?
- Ah, é só puxar o gatilho.
HUAHUAHU...
Flw.