Variáveis do shell©2002 FABRICIO FERRARI

O shell permite que se criem variáveis e que se lhes atribuam valores guardados durante a execução do shell. As variáveis podem ser variáveis locais ou variáveis de ambiente (globais). Os nomes das variáveis podem ser constituídos de quaisquer caracteres alfanuméricos. Para criar e ao mesmo tempo atribuir um valor à variável na mesma operação, usamos o comando set para variáveis locais ou setenv para as de ambiente[*]. No caso do setenv não é usado o sinal de = entre o nome e o valor da variável. O valor de uma variável é acessado através do nome da variável precedido pelo operador $[*], por exemplo

$ set estado= ``Rio Grande do Sul''

$ echo $estado

Rio Grande do Sul

Neste caso o echo mostra o conteúdo de $estado na tela. Note que o argumento passado para o echo é ``Rio Grande do Sul'' pois o shell já fez a interpolação da variável $estado na cadeia de caracteres correspondente. As variáveis podem ser usadas em qualquer comando no contexto do shell. Para referir-se ao nome de uma variável sem ambiguidade, inclue-se seu nome entre chaves { } , observe

$ set arquivos=``/dados/curso''

$ cp ${arquivos}/aula2.tex /home/alunos

assim o shell procura por uma variável arquivo e concatena o seu valor com o resto da cadeia /aula2.tex e então passa o argumento inteiro para o comando cp. Note que tanto a interpolação de variáveis em seus respectivos valores como a substituição dos curingas numa lista de arquivos (Seção [*]) é feita pelo shell e o resultado desta operação (em caso de sucesso) é passada ao aplicativo. Nenhum dos aplicativos realmente recebe $estado ou aluno? como argumento, mas o significado que estas expressões tem para o shell. Se for necessário usar caracteres especiais do tipo $, *, ?, [ ] como argumento de aplicativos, usa-se o caracter de fuga $ \backslash$ precedendo os caracteres especiais. Isto evita que o shell interprete-os. Por exemplo, para lermos a página de ajuda do comando less, que serve para mostrar o conteúdo de um arquivo no terminal, usamos $ less - $ \backslash$? pois não queremos que o shell substitua ? pelo nome de um arquivo com uma só letra (se ? fosse um curinga) mas que o less receba o ? como argumento.

O recurso de substituição da saída padrão (Seção [*]) pode ser explorado para definir variáveis a partir da saída de aplicativos

$ set sistema=`uname`

$ echo $sistema

Linux

que pode ser extensivamente explorado na construção de scripts do shell.

Algumas variáveis são definidas internamente pelo shell e podem ser usadas durante sua execução. A tabela [*] relaciona parte das variáveis definidas pelo tcsh ao iniciar.


Tabela 3.2: Variáveis definidas pelo shell tcsh. Os nomes em minúsculas são locais e em MAIÚSCULAS são de ambiente.
NOME DA VARIÁVEL SIGNIFICADO
user e USER nome do usuário
home e HOME diretório padrão de $user
path lista de diretórios onde o shell procura pelos aplicativos
shell shell em uso
tcsh a versão do tcsh
cwd ou PWD diretório de trabalho atual
HOST nome do computador
HOSTTYPE arquitetura do computador


A interpolação de variáveis ocorre sempre que seu nome for invocado diretamente ou entre aspas duplas. Qualquer texto entre aspas simples será interpretado literalmente, sem interpolações. Acompanhe o exemplo abaixo

$ set dia=sexta

$ set aviso=``Ontem foi $dia''

$ echo $aviso

Ontem foi sexta

$ set aviso=``Ontem foi $dia''

$ echo $aviso

Ontem foi $dia

desta forma, as aspas simples fornecem um mecanismo para que as interpolações de variáveis sejam ignoradas, enquanto as duplas permitem que as substituições sejam feitas, preservando a unidade da cadeia de caracteres.

leon 2008-08-19