Uma variável de shell pode ser global ou local. Variáveis globais, ou de ambiente, podem ser acessadas em todos os shells. As variáveis locais, ao contrário, são visíveis apenas no shell atual.
Para ver todas as variáveis de ambiente, use o comando printenv. Se for preciso saber o valor de uma variável, insira o nome da variável como argumento:
printenv PATH
Uma variável, seja ela global ou local, também pode ser visualizada com echo:
echo $PATH
Para definir uma variável local, use um nome de variável, seguido pelo sinal de igual, seguido pelo valor:
PROJECT="SLED"
Não insira espaços antes e depois do sinal de igual, senão você obterá um erro. Para definir uma variável de ambiente, use export:
export NAME="tux"
Para remover uma variável, use unset:
unset NAME
A tabela a seguir contém algumas variáveis de ambiente comuns que podem ser usadas nos seus scripts shell:
Tabela 7.5. Variáveis de ambiente úteis
|
|
diretório pessoal do usuário atual |
|
|
nome do host atual |
|
|
quando uma ferramenta é localizada, ela usa o idioma dessa variável de ambiente. Também é possível definir o idioma inglês como |
|
|
caminho de pesquisa do shell, uma lista de diretórios separados por dois-pontos |
|
|
especifica o prompt normal impresso antes de cada comando |
|
|
especifica o prompt secundário impresso quando você executa um comando em várias linhas |
|
|
diretório de trabalho atual |
|
|
usuário atual |
Por exemplo, se você tiver o script foo.sh, poderá executá-lo desta maneira:
foo.sh "Tux Penguin" 2000
Para acessar todos os argumentos que são passados ao seu script, você precisa de parâmetros de posição. Isto é, $1 para o primeiro argumento, $2 para o segundo e assim sucessivamente. É possível usar até nove parâmetros. Para obter o nome do script, use $0.
O script foo.sh a seguir imprime todos os argumentos de 1 a 4:
#!/bin/sh echo \"$1\" \"$2\" \"$3\" \"$4\"
Se você executar esse script com os argumentos acima, obterá:
"Tux Penguin" "2000" "" ""
As substituições de variáveis aplicam um padrão ao conteúdo de uma variável, seja da esquerda ou da esquerda. A lista a seguir contém as formas de sintaxe possíveis:
${VAR#padrão}
remove a correspondência mais curta possível da esquerda:
file=/home/tux/book/book.tar.bz2
echo ${file#*/}
home/tux/book/book.tar.bz2${VAR##padrão}
remove a correspondência mais longa possível da esquerda:
file=/home/tux/book/book.tar.bz2
echo ${file##*/}
book.tar.bz2${VAR%padrão}
remove a correspondência mais curta possível da direita:
file=/home/tux/book/book.tar.bz2
echo ${file%.*}
/home/tux/book/book.tar${VAR%%padrão}
remove a correspondência mais longa possível da direita:
file=/home/tux/book/book.tar.bz2
echo ${file%%.*}
/home/tux/book/book${VAR/padrão_1/padrão_2}
substitui o conteúdo de VAR do padrão_1 pelo do padrão_2:
file=/home/tux/book/book.tar.bz2
echo ${file/tux/wilber}
/home/wilber/book/book.tar.bz2