<Anterior | Conteúdo | Próxima>
Atribuição de valores a variáveis e constantes
É aqui que nosso conhecimento sobre expansão realmente começa a dar frutos. Como vimos, às variáveis são atribuídos valores desta forma:
variável=valor
onde variável é o nome da variável e valor é uma string. Ao contrário de algumas outras linguagens de programação, o shell não se preocupa com o tipo de dados atribuídos a uma variável; trata todos eles como cordas. Você pode forçar o shell a restringir a atribuição a inteiros usando o declarar comando com o -i opção, mas, como definir variáveis como somente leitura, isso raramente é feito.
Observe que, em uma atribuição, não deve haver espaços entre o nome da variável, o sinal de igual e o valor. Então, em que pode consistir o valor? Qualquer coisa que possamos expandir em uma string:
a = z
b = "uma string"
c = "uma string e $ b"
d = $ (ls -l foo.txt) e = $ ((5 * 7)) f = "\ t \ ta string \ n"
# Atribua a string "z" à variável a.
# Os espaços incorporados devem estar entre aspas.
# Outras expansões, como variáveis, podem ser
# expandido para a atribuição.
# Resultados de um comando.
# Expansão aritmética.
# Sequências de escape, como tabulações e novas linhas.
a = z
b = "uma string"
c = "uma string e $ b"
d = $ (ls -l foo.txt) e = $ ((5 * 7)) f = "\ t \ ta string \ n"
Múltiplas atribuições de variáveis podem ser feitas em uma única linha:
a = 5 b = "uma string"
a = 5 b = "uma string"
Durante a expansão, os nomes das variáveis podem ser circundados por chaves opcionais “{}”. Isso é útil nos casos em que o nome de uma variável se torna ambíguo devido ao seu ambiente circundante
texto. Aqui, tentamos mudar o nome de um arquivo de meu arquivo para meuarquivo1, usando uma variável:
[me @ linuxbox ~] $ nome do arquivo = "meuarquivo" [me @ linuxbox ~] $ toque em $ nome do arquivo [me @ linuxbox ~] $ mv $ filename $ filename1
mv: operando do arquivo de destino ausente após `myfile 'Tente` mv --help' para mais informações.
[me @ linuxbox ~] $ nome do arquivo = "meuarquivo" [me @ linuxbox ~] $ toque em $ nome do arquivo [me @ linuxbox ~] $ mv $ filename $ filename1
mv: operando do arquivo de destino ausente após `myfile 'Tente` mv --help' para mais informações.
Esta tentativa falha porque o shell interpreta o segundo argumento do mv comando como uma nova (e vazia) variável. O problema pode ser superado desta forma:
[me @ linuxbox ~] $ mv $ filename $ {filename} 1
[me @ linuxbox ~] $ mv $ filename $ {filename} 1
Ao adicionar os colchetes ao redor, o shell não interpreta mais o 1 como parte do nome da variável.
Aproveitaremos esta oportunidade para adicionar alguns dados ao nosso relatório, nomeadamente a data e hora em que o relatório foi criado e o nome de utilizador do criador:
#! / Bin / bash
# Programa para gerar uma página de informações do sistema TITLE = "Relatório de informações do sistema para $ HOSTNAME"
CURRENT_TIME = $ (data + "% x% r% Z")
TIMESTAMP = "Gerado $ CURRENT_TIME, por $ USER"
echo "
$ TITLE
$ TITLE
$ TIMESTAMP
"
#! / Bin / bash
# Programa para gerar uma página de informações do sistema TITLE = "Relatório de informações do sistema para $ HOSTNAME"
CURRENT_TIME = $ (data + "% x% r% Z")
TIMESTAMP = "Gerado $ CURRENT_TIME, por $ USER"
echo "
$ TITLE
$ TITLE
$ TIMESTAMP
"