Variáveis no Shell do Linux [Guia Básico]
Trabalhar com variáveis no Shell do Linux é essencial para qualquer administrador de sistemas, pois elas em conjunto com alguns comandos dão muito poder e flexibilidade.
Durante a execução do bash são mantidas algumas variáveis especiais que contêm alguma informação importante para a execução do shell.
Estas variáveis são carregadas no início da execução do bash e também podem ser configuradas manualmente em qualquer momento.
Prompt de comandos PS1 e PS2
A primeira variável que iremos abordar é a PS1 ou simplesmente Prompt String 1. Esta variável guarda o conteúdo do prompt de comandos do bash quando ele está pronto para receber comandos.
Existe também a variável PS2 que guarda o conteúdo do prompt de comandos quando são necessários múltiplas linhas para completar um comando.
Estas duas variáveis do shell não afetam como o interpretador irá processar os comandos recebidos, mas podem ser de grande ajuda quando carregam informações extras como nome do usuário, diretório corrente, etc.
Esta variável é a grosso modo como o shell irá se apresentar.
Convencionou-se que as variáveis são todas escritas em caixa-alta. Mas é importante que você saiba que $nome e $NOME são duas variáveis diferentes para o shell.
O conteúdo de qualquer variável do Shell poderá ser visualizado com o comando echo sucedido pelo símbolo $ mais o nome da variável:
$ echo $PS1
\$
O caractere \ diz que qualquer outro caractere que o sucede deve ser interpretado exatamente como ele é e não processado pelo shell. Ele é o que chamamos de metacaractere.
É comum que o prompt de comandos padrão do bash venha no formato:
\u@\h:\W\$
Os comandos e variáveis no Linux são sensíveis às letras maiúsculas e minúsculas.
Cada um destes caracteres é interpretado de forma especial. O \u é utilizado para representar o nome do usuário, o \h é utilizado para representar o nome do sistema (hostname) e o \W é o diretório corrente. Um exemplo para este prompt é:
uira@notebook:home$
Variável PATH
Outra variável importante do Shell é o PATH. O path guarda uma lista dos diretórios que contêm os programas que você poderá executar sem precisar passar na linha de comandos o caminho completo de sua localização.
$ echo $PATH
/sbin:/bin:/usr/sbin:/usr/bin
É importante que você saiba que o interpretador de comandos do bash acompanha a seguinte ordem para achar e executar os comandos digitados:
1) O comando digitado é um comando interno do interpretador de comandos?
2) Se não for, o comando é um programa executável localizado em algum diretório listado na variável PATH?
3) A localização do comando foi explicitamente declarada?
Uma dica interessante é incluir “:.” no final da variável PATH para que o bash inclua o diretório corrente na sua lista de busca por programas executáveis. Diferentemente do MS-DOS, o diretório corrente não está incluso na lista de busca padrão.
Sem incluir o “:.” no PATH é necessário informar o caminho relativo ao chamar programas no diretório corrente com “./nomedoprograma”.
Listando as variáveis no Linux
Uma lista completa das variáveis do shell poderá ser obtida com o comando set.
Você poderá também alterar ou criar uma nova variável do shell através dos comandos:
$ LIVRO=”Certificação Linux”
$ export LIVRO
Preferencialmente as variáveis devem ser declaradas em caixa alta e não coloque espaços entre o nome da variável, o símbolo = e o seu conteúdo. Se o conteúdo for alfanumérico é desejável que ele esteja entre aspas simples ou duplas.
Diferença de aspas simples e aspas duplas no Linux
Quando o texto de uma variável é uma sequência comum de letras e números, pouco importa se você vai usar aspas simples ou duplas.
$ FRASE1=”Este é um teste”
$ FRASE2=’de direfença entre aspas’
$ echo $FRASE1 $FRASE2
Este é um teste de diferença entre aspas
Mas se você for utilizar as variáveis entre aspas, há diferença:
$ echo “$FRASE1 $FRASE2”
Este é um teste de diferença entre aspas
$ echo ‘$FRASE1 $FRASE2’
$FRASE1 $FRASE2
Então as aspas duplas expandem o conteúdo das variáveis, enquanto as aspas simples não.
Isto faz diferença se você quer por exemplo incluir um diretório na variável PATH:
$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/opt/aws/bin:/home/ec2-user/bin
$ PATH=”$PATH:/ora/oracle/admin/bin”
$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/sbin:/opt/aws/bin:/home/ec2-user/bin:/ora/oracle/admin/bin
Neste caso as aspas simples não funcionariam.
Exportar variáveis do shell para uso nos programas
Depois de criar uma variável do shell, é preciso exportá-la para o ambiente com o comando export.
Quando uma variável é exportada para o ambiente ela fica disponível para todos os processos filhos do shell (todos os programas e aplicações que você executar no bash).
Cada vez que um processo é executado pelo shell, ele somente irá receber as variáveis criadas pelo shell se elas forem exportadas com o comando export.
Assim o processo filho (o programa que desejamos executar) vai herdar do processo pai (o shell) as variáveis criadas.
Veja o exemplo abaixo, onde criamos uma variável chamada LIVRO:
$ LIVRO=”Certificação Linux”
echo $LIVRO
Certificação Linux
Se executarmos o bash novamente no mesmo terminal, para criar um processo filho, você verá que a variável LIVRO não existe, porque ela não foi exportada para os processos filho:
$ bash
$ echo $LIVRO
Algumas palavras não podem ser utilizadas como variáveis, pois são o que chamamos de palavras reservadas do Bash, utilizadas como comandos internos.
Palavras reservadas do shell
São elas: alias, alloc, bg, bind, bindkey, break, breaksw, builtins, case, cd, chdir, command, complete, continue, default, dirs, do, done, echo, echotc, elif, else, end, endif, endsw, esac, eval, exec, exit, export, false, fc, fg, filetest, fi, for, foreach, getopts, glob, goto, hash, hashstat, history, hup, if, jobid, jobs, kill, limit, local, log, login, logout, ls-F, nice, nohup, notify, onintr, popd, printenv, pushd, pwd, read, readonly, rehash, repeat, return, sched, set, setenv, settc, setty, setvar, shift, source, stop, suspend, switch, telltc, test, then, time, times, trap, true, type, ulimit, umask, unalias, uncomplete, unhash, unlimit, unset, unsetenv, until, wait, where, which, while.
Comando set
Uso:
$ set [variável]
O comando set informa uma lista de todas as variáveis locais, variáveis ambientais e funções do shell.
Algumas opções do comando set alteram o comportamento do bash, a saber:
- -C Previnem que a saída de um programa usando `>’, `>&’ e `<>’ regrave arquivos. Mesmo que a opção -o noclobber
- -n Lê os comandos, mas não os executa. Útil para checar scripts. Mesmo que opção -o noexec
- -P Proíbe o shell de seguir links simbólicos. Mesmo que opção -o physical
- -a Marca as variáveis modificadas ou criadas para export. Mesmo que opção -o allexport
- -o history Habilita guardar o histórico de comandos digitados.
Ao utilizar as opções do set, o símbolo + pode ser utilizado para desabilitar as opções.
Comando unset
Uso:
$ unset [variável]
O comando unset apaga uma variável ambiental da memória.
Ex.:
$ unset LIVRO
Comando env
Uso:
$ env VARIAVEL=valor programa
O comando env é utilizado para executar um programa enviando uma variável ambiental. Ele habilita que um determinado programa possa ler uma variável sem a necessidade de exportá-la com o comando export. A opção -i diz para o env ignorar o ambiente herdado, sem alterar o conteúdo de qualquer variável existente. É útil para alterar uma variável momentaneamente para um teste.
Ex.:
$ env HOME=/home/guest2 programax
Comando pwd
Uso:
$ pwd
O comando pwd informa o diretório absoluto corrente.
Ex.:
$ pwd
/usr/local
Quer saber se uma certificação vale a pena ? Saiba porque os salários são bons, e porque as empresas estão procurando profissionais de Linux.
Você vai ententer que os benefícios superam de longe o sacrifício.
E se você já se decidiu, veja nosso Guia de Certificação.
E se quer saber onde fazer as provas, consulte a lista de cidade.
Se quiser saber o idioma das provas, veja esse post.
Aprenda muito mais sobre Linux em nosso curso online. Você pode fazer a matrícula aqui com trial de 7 dias grátis. Se você já tem uma conta, pode acessar aqui.