- Gerar link
- X
- Outros aplicativos
Postagem em destaque
- Gerar link
- X
- Outros aplicativos
DECLARE - ATRIBUTOS DE VARIÁVEIS
O comando declare define valores e atributos a variáveis, dessa forma podemos declarar tipos como: inteiro, array indexada, array associativa, ponteiro. Infelizmente o Shell Script não possui um arsenal de tipos como podemos encontrar em outras linguagens mais estruturadas como Python, C, Java e etc; mas isso não diminui o seu poder, pelo contrário, apresenta uma forma diferente de se programar.
Sintaxe: declare (-|+)[atributo] variavel="valor"
Nota: Usando '+' em vez de '-' desativa o atributo dado.
Se nenhuma variável for passada, exibe os atributos e valores de todas as variáveis.
1. -a
Nota: Usando '+' em vez de '-' desativa o atributo dado.
Se nenhuma variável for passada, exibe os atributos e valores de todas as variáveis.
1. -a
Declara um array indexado. (se suportar)
1.1 Exemplo
Declarando um array indexado armazenando a string 'Linux' no primeiro índice.
# Inicializando array.
Declare -a array="Linux"
# Imprimindo valor do índice '0'
echo ${array[0]}
Linux
1.2 Exemplo
Declarando um array indexado e atribuindo valores posteriomente.
# Incializando array
declare -a array
# Atribuindo valores
array[0]="shell"
array[1]="script"
# Imprimindo todos elementos.
echo ${array[@]}
shell script
2. -A
Declara um array associativo. (se suportar)
Um array associativo é uma estrutura de dados semelhante ao array indexado, porém utiliza conjuntos não ornados de itens que são formados por um par chave e valor, onde cada chave possui um valor associado. Essas chaves são definidas pelo usuário e devem ser armazenadas na estrutura.
2.1 Exemplo
Declarando um array associativo, depois define as chaves ‘unix’ e ‘nt’ com seus valores.
# Inicializando array
declare -A sys
# Atribuindo chaves e valores.
sys['unix']="Linux"
sys['nt']="Windows"
# Imprimindo valores
echo ${sys['unix']} ${sys['nt']}
Linux Windows
2.2 Exemplo
Declarando o array já definindo as chaves e os valores.
# Inicializando array
declare -A sys=(['unix']="Linux" ['nt']="Windows")
# Imprimindo valores
echo ${sys['unix']} ${sys['nt']}
Linux Windows
2.3 Exemplo
Listando as chaves do array.
# Inicializando array
declare -A sys=(['unix']="Linux"
# Imprimindo todas as chaves do array.
echo ${!sys[@]}
unix nt
Observação: Vetores associativos são geralmente usados quando a busca é a operação mais frequente. Por essa razão, implementações são geralmente planejadas para permitir rapidez na busca, ao custo de lentas inserções e uma grande área de cobertura para armazenamento se comparado a outras estruturas de dados.
3. -i
Declara a variável do tipo inteiro.
Nota: Variáveis declaradas como inteiro ao receberem valores não numéricos, são convertidos para ‘0’ (zero).
3.1 Exemplo
# Inicializando variável com atributo inteiro.
declare -i num=10
# Imprimindo valor
echo $num
10
3.2 Exemplo
Tentando atribuir um valor não numérico.
# Inicializando variável.
num="string"
# Imprimindo valor.
echo $num
0
4. -n
Declara uma referência à variável denominada pelo seu valor. (ponteiro)
Nota: Esse denominação é semelhante ao uso de ponteiros na linguagem C, C++ e outros; onde um ponteiro é um objeto cujo valor se refere diretamente a um outro valor alocado em outra área da memória.
4.1 Exemplo
Declarando um ponteiro chamado 'obj' que aponta para 'var'.# Inicializando variávelvar=10
# Inicializando ponteiro de vardeclare -n obj=var
# Imprimindo o valor do ponteiro.echo $obj10# Alterando o valor de varvar=50# Imprimindo novamente o valor do ponteiro.echo $obj50
4.2 Exemplo
Criando um ponteiro de ponteiro.
# Inicializando variável
var=10
# Inicializando o 1º ponteiro que aponta para 'var'
declare -n obj2=var
# Inicializando o 2º ponteiro que aponta para o 1º
declare -n obj1=obj2
# Imprimindo valor
echo $obj1
50
5. -r
Define o atributo da variável como somente leitura.Nota: Após definir a variável como somente leitura, seu valor se torna imutável até ao final da execução.
5.1 Exemplo
Atribui um valor a variável e tenta alterar seu valor.
# Inicializando variável somente leitura
declare -r var=10
# Imprimindo valor
echo $var
10
# Tentando atribuir um novo valor.
var=20
bash: var: a variável permite somente leitura.
6. -l
Define atributo da variável para conversão em minúsculo.6.1 Exemplo
Declarando a variável para converter a string em maiúscula armazena para minúsculo.
# Inicializando variável lowercase
declare -l var
# Armazenando uma string maiúscula.
var="SHELL SCRIPT X"
# Imprimindo string convertida.
echo $var
shell script x
7. -u
Define atributo da variável para conversão em maiúsculo.7.1 Exemplo
Declarando variável para converter string minúscula armazenada para maiúscula.
# Inicializando variável uppercase
declare -u var
# Armazenando string minúscula.
var="shell script x"
# Imprimindo string convertida.
echo $var
SHELL SCRIPT X
8. -g
Define variável com atributo global quando usado em uma função shell; de outra forma ignorado.8.1 Exemplo
Criando duas funções, onde a 1ª função declara a variável e atribui o seu valor e a 2ª função imprimir o seu valor.
# exemplo1.sh
#!/bin/bash
func2()
{
# Imprime o valor de 'SYS'
echo "Sistema: $SYS"
}
func1()
{
# Inicializa variável
declare SYS="Linux"
}
# Chama as funções
func1
func2
#FIM do script
# Executando script
./exemplo1.sh
Sistema:
O valor retornado de SYS foi nulo, porque a variável é local, ou seja estando visível somente dentro da função 'func1' onde foi declarada.
8.2 Exemplo
Utilizando o mesmo script, porém inserindo o parâmetro ‘-g’ para declarar a variável como global e reexecutar o script para ver o resultado.
# exemplo1.sh
#!/bin/bash
func2()
{
# Imprime o valor de 'SYS'
echo "Sistema: $SYS"
}
func1()
{
# Inicializa variável
declare -g SYS="Linux"
}
# Chama as funções
func1
func2
#FIM do script
# Executando script
./exemplo1.sh
Sistema: Linux
Agora o valor de 'SYS' foi retornado, porque quando a variável é definida como global, ela passa a ficar visível em todo o script.
9. -f
Restringir a ação ou exibir nomes de funções e definiçõesNota: Um declare -f sem argumentos em um script faz com que liste todas as funções definidas anteriormente nesse script.
9.1 Exemplo
Script com 4 funções aritméticas soma, subtração, divisão e multiplicação; imprimindo somente o corpo das funções (soma e divisão).
# Script: cal.sh
#!/bin/bash
# Funções
somar()
{
echo "$1+$2=$(($1+$2))"
}
subtrair()
{
echo "$1-$2=$(($1-$2))"
}
dividir()
{
echo "$1/$2=$(($1/$2))"
}
multiplicar()
{
echo "$1*$2=$(($1*$2))"
}
# Exibindo o corpo das funções (somar e dividir).
declare -f somar dividir
# efetua operação
somar 10 20
dividir 30 3
#FIM DO SCRIPT
Executando script
./cal.sh
somar()
{
echo "$1+$2=$(($1+$2))"
}
dividir()
{
echo "$1/$2=$(($1/$2))"
}
10+20=30
30/3=10
9.2 Exemplo
Listando todas as funções do script. (Executando declare -f sem argumentos)
# Script: cal.sh
#!/bin/bash
# Funções
somar()
{
echo "$1+$2=$(($1+$2))"
}
subtrair()
{
echo "$1-$2=$(($1-$2))"
}
dividir()
{
echo "$1/$2=$(($1/$2))"
}
multiplicar()
{
echo "$1*$2=$(($1*$2))"
}
# Lista todas as funções
declare -f
# Efetua operação
somar 10 20
subtrair 50 15
dividir 30 3
multiplicar 8 4
# FIM DO SCRIPT
Executando script.
./cal.sh
somar()
{
echo "$1+$2=$(($1+$2))"
}
subtrair()
{
echo "$1-$2=$(($1-$2))"
}
dividir()
{
echo "$1/$2=$(($1/$2))"
}
multiplicar()
{
echo "$1*$2=$(($1*$2))"
}
10+20=30
50-15=35
30/3=10
8*4=32
10. -F
Restringe somente a nome de funções.10.1 Exemplo
Utilizando o mesmo script para listar todas as funções, porém alterando o parâmetro '-f' por '-F.
# Script: cal.sh
#!/bin/bash
# Funções
somar()
{
echo "$1+$2=$(($1+$2))"
}
subtrair()
{
echo "$1-$2=$(($1-$2))"
}
dividir()
{
echo "$1/$2=$(($1/$2))"
}
multiplicar()
{
echo "$1*$2=$(($1*$2))"
}
# Lista todas as funções
declare -F
# Efetua operação
somar 10 20
subtrair 50 15
dividir 30 3
multiplicar 8 4
# FIM DO SCRIPT
Executando script.
./cal.sh
declare -f dividir
declare -f multiplicar
declare -f somar
declare -f subtrair
10+20=30
50-15=35
30/3=10
8*4=32
Comentários
Postar um comentário