shell-script-pt
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [shell-script] Declarar inteiro longo


From: Tiago Barcellos Peczenyj
Subject: Re: [shell-script] Declarar inteiro longo
Date: Sun, 27 Jul 2008 20:48:15 -0300

Guilherme,

Sempre achei que as variaveis de ambiente do Shell tem um "cheiro" das
macros do pre-processador C. O interpretador encontra um $ e
imediatamente substitui a string que vem a seguir pelo que ele tenha
armazenado com aquele label.

O Bash tem variaveis "comuns" e arrays de dados, que tem usos dos mais
variados. O primeiro uso dessas variaveis é alterar o comportamento do
Shell: o $PATH por exemplo, é importante para vc não ter que passar o
caminho completo de um determinado utilitario. Entram questões de
segurança: imagine que alguem pudesse alterar o valor do $PATH na sua
instância de Shell e, quando vc executasse o ls estaria executando um
/tmp/diretorio/do/hacker/ls ao invés do /bin/ls? Ou alterar o
$HTTP_PROXY para algo que interceptasse a sua comunicação com o mundo
externo (vulgo "ataque do homem do meio") nos programas que verificam
se vc exportou essa variavel (como wget, curl, lynx). O $IFS é outra
variavel que muda o comportamento do shell informando quais caracteres
são os separadores de parâmetros. São poucas as linguagens que tem
essa caracteristica: em AWK vc pode definir uma variavel global
IGNORECASE ;-)

Felizmente podemos usar as variaveis de ambiente do shell para
controlar o estado dos nossos procedimentos algoritmicos, da mesma
forma que fazemos em outras linguagens, porém não somos obrigados a
faze-lo, uma vez que alguns algortimos foram incorporados em alguns
programas básicos de uso frequente no shell. Um bom exemplo é o
comando 'grep': vc não precisa criar uma logica para ler um arquivo
linha a linha e analisar se nessa variavel contem uma determinada
palavra, se o grep ja faz isso. Geralmente vc precisa usar variaveis
se esta fazendo algo diferente do "normal" :)

A maioria dos shells suporta aritmética de inteiros, arrays, as vezes
arrays associativos, mas tudo pensado sob ponto de vista do uso normal
do shell, que é ser interface entre o usuario e o sistema. De repente
seria bom um suporte inerente a estruturas mais ricas de dados, um
parser xml nativo, closures, classes, etc, mas vendo cada facilidade
da linguagem (principalmente as expansões * ~ e { }, pipes e
redirecionamentos) acho que não é necessário, mas existem shells
exóticos para isso.


2008/7/27 Guilherme Gall <address@hidden>:
> Saudações Julio e pessoal da lista,
>
> Posso estar cometendo um equívoco, então por favor me corrijam se eu
> estiver errado. Mas C não possui tipagem fraca? Por exemplo, posso
> tranquilamente declarar uma variável char, atribuir um valor numérico
> a ela, alterar essa variável com operações como adição ou
> multiplicação e depois imprimir seu valor como um decimal (através do
> formatador %d da função printf por exemplo) sem qualquer problema.
>
> Nesse sentido entendo que shell e C estão no mesmo barco das
> linguagens fracamente tipadas. A diferença é que C teria tipagem
> estática por atribuir um tipo, ainda que fraco, a variável e não a seu
> valor (ou seja, uma variável não muda de tipo ao longo da execução do
> programa) e shell teria tipagem dinâmica pois seu tipo dependeria do
> contexto, com a variável podendo ter um tipo diferente em dois pontos
> distintos da execução do programa.
>
> Se alguém puder me dar um esclarecimento sobre os conceitos de tipagem
> que citei acima e dizer onde o shell se enquadra, ficaria agradecido.
>
> Abraços,
> --
> Guilherme Magalhães Gall
>
> 2008/7/27 Julio C. Neves <address@hidden>:
>
>> Fala Felipe,
>> não entendi a sua dúvida pois ao contrário do C, que é fortemente tipado,
>> o
>> Shell não tem tipagem nenhuma. Então para armazenar um valor em uma
>> variável
>> basta fazer:
>>
>> VarNaoDeclarada=2323523452342363456345347546754.675467456754674567456
>>
>> E, apesar de ser um real grande pra chuchu, com float e tudo, isso não
>> produz erro. De qq forma mande o trecho do seu script onde tá dando kk
>> para
>> podermos te ajudar melhor.
>>
>> Outra coisa: não acredite qdo te disserem que não dá para fazer alguma
>> coisa
>> usando as ferramentas do shell. Pegue outras opiniões que provavelmente vc
>> conseguirá fazer.
>>
>> Abraços,
>> Julio
>>
>>
>> 2008/7/26 Felipe <address@hidden>
>>
>>> Ola lista,
>>>
>>> Declarei uma variavel que recebe um valor da entrada padrao stdin do
>>> usuario no entanto quando se armazena um inteiro longo me retorna essa
>>> mensagem de erro :
>>>
>>> integer expression expected
>>>
>>> Em C eu declarava essa variavel como long int e conseguia armazenar o
>>> numero inteiro com grande quantidade de casas decimais ja no shell me
>>> retorna a mensagem acima.
>>>
>>> Alguem teria alguma soluçao?
>>>
>>> Grato
>>>
>>>
>>>
>>
>>
>>
>> --
>> Abraços,
>> Julio
>> Em setembro estarei dando um treinamento
>> Shell em Brasília (em 2 fins de semana).
>> Mais informações: www.tecnologiabr.com.br
>> Tel: (61) 3354-3162
>>
>>
>> [As partes desta mensagem que não continham texto foram removidas]
>>
>>
>> ------------------------------------
>>
>> ----------------------------------------------------------
>> Esta lista não admite a abordagem de outras liguagens de programação, como
>> perl, C etc. Quem insistir em não seguir esta regra será moderado sem prévio
>> aviso.
>> ----------------------------------------------------------
>> Sair da lista: address@hidden
>> ----------------------------------------------------------
>> Esta lista é moderada de acordo com o previsto em
>> http://www.listas-discussao.cjb.net
>> ----------------------------------------------------------
>> Servidor Newsgroup da lista: news.gmane.org
>> Grupo: gmane.org.user-groups.programming.shell.brazil
>>
>> Links do Yahoo! Grupos
>>
>>
>>
>
> 



-- 
Tiago B Peczenyj
Linux User #405772

http://peczenyj.blogspot.com/
"what does not kill us makes us stronger"


reply via email to

[Prev in Thread] Current Thread [Next in Thread]