<Anterior | Conteúdo | Próxima>
Variáveis e constantes
Porém, há um problema com nosso script. Observe como a string “Relatório de informações do sistema” é repetida? Com nosso pequeno script não é um problema, mas vamos imaginar que nosso script fosse muito longo e tivéssemos várias instâncias dessa string. Se quiséssemos mudar o título para outra coisa, teríamos que mudá-lo em vários lugares, o que poderia ser muito trabalhoso. E se pudéssemos organizar o script de modo que a string apareça apenas uma vez e não várias vezes? Isso tornaria a manutenção futura do script muito mais fácil. Veja como poderíamos fazer isso:
#! / Bin / bash
# Programa para gerar uma página de informações do sistema
title = "Relatório de informações do sistema"
echo "
$ title
$ title
"
#! / Bin / bash
# Programa para gerar uma página de informações do sistema
title = "Relatório de informações do sistema"
echo "
$ title
$ title
"
Criando um variável nomeado título e atribuindo a ele o valor “Relatório de informações do sistema”, podemos aproveitar a expansão dos parâmetros e colocar a string em vários locais.
Então, como criamos uma variável? Simples, nós apenas o usamos. Quando o shell encontra uma variável, ele a cria automaticamente. Isso difere de muitas linguagens de programação em que as variáveis devem ser explicitamente Declarado ou definido antes do uso. O shell é muito frouxo sobre isso, o que pode levar a alguns problemas. Por exemplo, considere este cenário executado na linha de comando:
[me @ linuxbox ~] $ foo = "sim" [me @ linuxbox ~] $ echo $ foo sim
[me @ linuxbox ~] $ echo $ tolo
[me @ linuxbox ~] $
[me @ linuxbox ~] $ foo = "sim" [me @ linuxbox ~] $ echo $ foo sim
[me @ linuxbox ~] $ echo $ tolo
[me @ linuxbox ~] $
Primeiro atribuímos o valor “sim” à variável Fooe, em seguida, exibir seu valor com eco. Em seguida, exibimos o valor do nome da variável digitado incorretamente como “tolo” e obtemos um resultado em branco. Isso ocorre porque o shell felizmente criou a variável enganar quando o encontrou e deu a ele o valor padrão de nada, ou vazio. Com isso, aprendemos que devemos prestar muita atenção à nossa ortografia! Também é importante entender o que realmente aconteceu neste exemplo. De nossa análise anterior de como o shell realiza expansões, sabemos que o comando:
[me @ linuxbox ~] $ echo $ foo
[me @ linuxbox ~] $ echo $ foo
sofre expansão de parâmetros e resulta em:
[me @ linuxbox ~] $ echo sim
[me @ linuxbox ~] $ echo sim
Considerando que o comando:
[me @ linuxbox ~] $ echo $ tolo
[me @ linuxbox ~] $ echo $ tolo
expande-se para:
[me @ linuxbox ~] $ echo
[me @ linuxbox ~] $ echo
A variável vazia se expande para nada! Isso pode causar estragos em comandos que exigem argumentos. Aqui está um exemplo:
[me @ linuxbox ~] $ foo = foo.txt [me @ linuxbox ~] $ foo1 = foo1.txt [me @ linuxbox ~] $ cp $ foo $ tolo
cp: operando do arquivo de destino ausente após `foo.txt '
[me @ linuxbox ~] $ foo = foo.txt [me @ linuxbox ~] $ foo1 = foo1.txt [me @ linuxbox ~] $ cp $ foo $ tolo
cp: operando do arquivo de destino ausente após `foo.txt '
Tente `cp --help 'para mais informações.
Tente `cp --help 'para mais informações.
Atribuímos valores a duas variáveis, Foo e foo1. Em seguida, realizamos um cp, mas soletrar incorretamente o nome do segundo argumento. Após a expansão, o cp comando é enviado apenas um argumento, embora exija dois.
Existem algumas regras sobre nomes de variáveis:
1. Os nomes das variáveis podem consistir em caracteres alfanuméricos (letras e números) e caracteres de sublinhado.
2. O primeiro caractere de um nome de variável deve ser uma letra ou um sublinhado.
3. Espaços e símbolos de pontuação não são permitidos.
A palavra “variável” implica um valor que muda e, em muitas aplicações, as variáveis são usadas dessa forma. No entanto, a variável em nosso aplicativo, título, é usado como um constante. Uma constante é como uma variável, pois tem um nome e contém um valor. A diferença é que o valor de uma constante não muda. Em um aplicativo que realiza cálculos geométricos, podemos definir PI como uma constante, e atribua a ela o valor de 3.1415, em vez de usar o número literalmente em todo o nosso programa. O shell não faz distinção entre variáveis e constantes; eles são principalmente para a conveniência do programador. Uma convenção comum é usar letras maiúsculas para designar constantes e letras minúsculas para variáveis verdadeiras. Modificaremos nosso script para obedecer a esta convenção:
#! / Bin / bash
# Programa para gerar uma página de informações do sistema IMERSÃO DE INGLÊS= "Relatório de informações do sistema Para $ HOSTNAME"echo"
$IMERSÃO DE INGLÊS
$IMERSÃO DE INGLÊS
"
#! / Bin / bash
# Programa para gerar uma página de informações do sistema IMERSÃO DE INGLÊS= "Relatório de informações do sistema Para $ HOSTNAME"echo"
$IMERSÃO DE INGLÊS
$IMERSÃO DE INGLÊS
"
Também aproveitamos a oportunidade para aprimorar nosso título adicionando o valor da variável shell
NOME DE ANFITRIÃO. Este é o nome de rede da máquina.
Observação: O shell realmente fornece uma maneira de impor a imutabilidade das constantes, por meio do uso do declarar comando embutido com o -r opção (somente leitura). Se tivéssemos atribuído IMERSÃO DE INGLÊS deste jeito:
declare -r TITLE = "Título da página"
o shell impediria qualquer atribuição subsequente a IMERSÃO DE INGLÊS. Este recurso raramente é usado, mas existe para scripts muito formais.