Postagem em destaque

Criando bot do Telegram em Shell script com ShellBot

declare

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

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ável
var=10

# Inicializando ponteiro de var
declare -n obj=var

# Imprimindo o valor do ponteiro.
echo $obj
10
# Alterando o valor de var
var=50
# Imprimindo novamente o valor do ponteiro.
echo $obj
50

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ções

Nota: 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

Contato

Nome

E-mail *

Mensagem *