Estações de trabalho on-line OnWorks Linux e Windows

Logotipo

Hospedagem online grátis para estações de trabalho

<Anterior | Conteúdo | Próxima>

Atribuição

Embora seus usos possam não ser imediatamente aparentes, as expressões aritméticas podem realizar atribuições. Realizamos atribuições muitas vezes, embora em um contexto diferente. Cada vez que atribuímos um valor a uma variável, estamos executando uma atribuição. Também podemos fazer isso em expressões aritméticas:



[me @ linuxbox ~] $ foo =

[me @ linuxbox ~] $ echo $ foo


[me @ linuxbox ~] $ if ((foo = 5)); em seguida, echo "É verdade."; fi

É verdade.

[me @ linuxbox ~] $ echo $ foo

5

[me @ linuxbox ~] $ foo =

[me @ linuxbox ~] $ echo $ foo


[me @ linuxbox ~] $ if ((foo = 5)); em seguida, echo "É verdade."; fi

É verdade.

[me @ linuxbox ~] $ echo $ foo

5


No exemplo acima, primeiro atribuímos um valor vazio à variável Foo e verifique se ele está realmente vazio. Em seguida, realizamos um if com o comando composto ((foo = 5

)). Este processo faz duas coisas interessantes: 1) atribui o valor 5 à variável

foo e 2) é avaliado como verdadeiro porque foo foi atribuído a um valor diferente de zero.


imagem

Nota: É importante lembrar o significado exato do = na expressão acima. Um único = executa atribuição. fo = 5 diz “fazer Foo igual a 5, ”enquanto == avalia a equivalência. fo == 5 diz “faz Foo igual a 5? ” Este é um recurso comum em muitas linguagens de programação. No shell, isso pode ser um pouco confuso porque o teste comando aceita um único = para equivalência de string. Mais uma razão para usar o mais moderno [[]] e (()) comandos compostos no lugar de teste.


imagem

Além do =, o shell também fornece notações que realizam algumas atribuições muito úteis:


Tabela 34-4: Operadores de atribuição


Descrição da notação

Descrição da notação


imagem

parâmetro = valor Atribuição simples. Atribuições valor para parâmetro.


imagem

parâmetro += valor Adição. Equivalente a parâmetro = parâmetro +

valor.


imagem

parâmetro -= valor Subtração. Equivalente a parâmetro = parâmetro -

valor.


imagem

parâmetro *= valor Multiplicação. Equivalente a parâmetro = parâmetro

* valor.


imagem

parâmetro /= valor Divisão inteira. Equivalente a parâmetro =

valor do parâmetro.


imagem

parâmetro %= valor Módulo. Equivalente a parâmetro = parâmetro %

valor.


imagem

parâmetro++ Variável pós-incremento. Equivalente a parâmetro =

parâmetro + 1 (no entanto, consulte a discussão abaixo).


imagem

parâmetro−− Variável pós-decremento. Equivalente a parâmetro =

parâmetro - 1.


imagem

++parâmetro Pré-incremento variável. Equivalente a parâmetro =

parâmetro + 1.


imagem

--parâmetro Pré-decremento variável. Equivalente a parâmetro =

parâmetro - 1.


imagem


Esses operadores de atribuição fornecem um atalho conveniente para muitas tarefas aritméticas comuns. De especial interesse são o incremento (++) e decremento (−−) operadores, que aumentam ou diminuem o valor de seus parâmetros em um. Este estilo de notação é retirado da linguagem de programação C e foi incorporado em uma série de outras linguagens de programação, incluindo bater.

Os operadores podem aparecer na frente de um parâmetro ou no final. Embora ambos aumentem ou diminuam o parâmetro em um, os dois posicionamentos têm uma diferença sutil. Se colocado na frente do parâmetro, o parâmetro é incrementado (ou decrementado) antes de o parâmetro ser retornado. Se colocado depois, a operação é realizada depois de o parâmetro é retornado. Isso é bastante estranho, mas é o comportamento pretendido. Aqui está uma demonstração:



[me @ linuxbox ~] $ foo = 1 [me @ linuxbox ~] $ echo $ ((foo ++)) 1

[me @ linuxbox ~] $ echo $ foo

[me @ linuxbox ~] $ foo = 1 [me @ linuxbox ~] $ echo $ ((foo ++)) 1

[me @ linuxbox ~] $ echo $ foo


2

2


Se atribuirmos o valor de um à variável Foo e então incrementar com o ++ operador colocado após o nome do parâmetro, Foo é retornado com o valor de um. No entanto, se olharmos para o valor da variável uma segunda vez, vemos o valor incrementado. Se colocarmos o ++ operador na frente do parâmetro, obtemos o comportamento mais esperado:


[me @ linuxbox ~] $ foo = 1 [me @ linuxbox ~] $ echo $ ((++ foo)) 2

[me @ linuxbox ~] $ echo $ foo

2

[me @ linuxbox ~] $ foo = 1 [me @ linuxbox ~] $ echo $ ((++ foo)) 2

[me @ linuxbox ~] $ echo $ foo

2


Para a maioria dos aplicativos de shell, prefixar o operador será o mais útil.

Os operadores ++ e - são freqüentemente usados ​​em conjunto com loops. Faremos algumas melhorias em nosso script de módulo para torná-lo um pouco mais restrito:



#! / Bin / bash

# módulo2: demonstra o operador de módulo para ((i = 0; i <= 20; ++ i )); Faz

E se (((i% 5) == 0)); então printf "<% d>" $ i

outro

printf "% d" $ i

fi feito

printf "\ n"

#! / Bin / bash

# módulo2: demonstra o operador de módulo para ((i = 0; i <= 20; ++ i )); Faz

E se (((i% 5) == 0)); então printf "<% d>" $ i

outro

printf "% d" $ i

fi feito

printf "\ n"


Top OS Cloud Computing na OnWorks: