+ Responder ao Tópico



  1. #1
    Walfredo
    Visitante

    Padrão Conversão de valores. SHELL

    Estou desenvolvendo um sistema para que se o load do servidor ultrapassar 10 o sistema mate o processos ou serviços, como mysql, exim...

    porém esbareri em um problema estou tendo que converter um número decimal para inteiro, isto é possível???

    Por exemplo, eu pegar o valor 10.257 e converter ele para 10 ou para 11 sei lá...

    Como faço isto, quais comandos?

    Abraços

  2. #2

    Padrão Conversão de valores. SHELL

    Fiz um script em perl que transforma bases numéricas, cadeias de caracteres, etc.. Não utilizei os packages do perl pois queria ver QUANTO trabalho eu teria, se iria conseguir, etc.. foi umas dos primeiros scripts em perl que fiz.. sinta-se a vontade em alterá-lo.

    http://phoenix.enforce.com.br/pub/nbc

    Ou use a lógica dele para fazer em outra linguagem (C ou PHP por exemplo).
    Se tiver php instalado, mais fácil ainda, o php assim como o perl já tem packages para fazer isso, só pesquisar a respeito.

    www.php.net
    www.perldoc.com

    Tem a "calc" do linux também, várias distribuições mantém esse pacote.
    Mas eu nunca utilizei, se quiser tentar.. olha as man-pages: "man calc", ou
    http://www.isthe.com/chongo/man/calc.1.html

    Abraços

  3. #3

    Padrão Conversão de valores. SHELL

    Desculpe, estou com a cabeça nas nuvens. Não prestei atenção no seu problema hehe. foi mal.. achei que você queria transformar para hexadecimal ou outra base qualquer.

    Se quiser só pegar a parte inteira do número:

    Código :
     phoenix@devel ~ $
     phoenix@devel ~ $ cat > hex.c
    #include <stdio.h>
     
    int main(int argc, char **argv)
    {
        if (!argv[1])
        {
            printf("usage: %s <numero>\n", argv[0]);
            return 1;
        }
        printf("%d\n", (unsigned long)atoi(argv[1]));
        return 0;
    }
     
     phoenix@devel ~ $ gcc -o hex hex.c
     phoenix@devel ~ $ ./hex 234.123
    234

  4. #4
    veiga
    Visitante

    Padrão Re: Conversão de valores. SHELL

    Olá,

    Citação Postado originalmente por Walfredo
    Estou desenvolvendo um sistema para que se o load do servidor ultrapassar 10 o sistema mate o processos ou serviços, como mysql, exim...

    porém esbareri em um problema estou tendo que converter um número decimal para inteiro, isto é possível???

    Por exemplo, eu pegar o valor 10.257 e converter ele para 10 ou para 11 sei lá...

    Como faço isto, quais comandos?

    Abraços
    Não sei como fazer type cast em shell script! mas soh pra quebrar o galho eu faria algo assim:

    Código :
    x=10.257 
    x=`echo $x | cut -d. -f1`
    echo $x 
    10

    Ah, voce tbm pode usar declare -i var pra declarar uma variavel como inteiro!

    feito!

  5. #5
    veiga
    Visitante

    Padrão Conversão de valores. SHELL

    Citação Postado originalmente por ph0enix
    Desculpe, estou com a cabeça nas nuvens. Não prestei atenção no seu problema hehe. foi mal.. achei que você queria transformar para hexadecimal ou outra base qualquer.

    Se quiser só pegar a parte inteira do número:

    Código :
     phoenix@devel ~ $
     phoenix@devel ~ $ cat > hex.c
    #include <stdio.h>
     
    int main(int argc, char **argv)
    {
        if (!argv[1])
        {
            printf("usage: %s <numero>\n", argv[0]);
            return 1;
        }
        printf("%d\n", (unsigned long)atoi(argv[1]));
        return 0;
    }
     
     phoenix@devel ~ $ gcc -o hex hex.c
     phoenix@devel ~ $ ./hex 234.123
    234
    ph0enix, olhando o sei código percebi que vc não costuma usa a opcao -Wall no gcc. Te aconselho a usar sempre!!

    feito!

  6. #6

    Padrão Conversão de valores. SHELL

    show all warnings ?
    Eu utilizo quando estou programando, não quando estou fazendo uma aplicação de 5 linhas. Só compilei e colei o resultado para ter certeza que era isso que ele ele desejava.

  7. #7
    veiga
    Visitante

    Padrão ok!

    Citação Postado originalmente por ph0enix
    show all warnings ?
    Eu utilizo quando estou programando, não quando estou fazendo uma aplicação de 5 linhas. Só compilei e colei o resultado para ter certeza que era isso que ele ele desejava.
    claro, claro! vc tem razão! eu soh falei isso pq achei estranho coisas como isso:

    printf("%d\n", (unsigned long)atoi(argv[1]));

    quem usa -Wall se acostuma a não fazer coisas como isso! mesmo quando não esta usando o -Wall!

    mas "no stress"! não to aqui pra criticar ninguem... soh queria ajudar!


    abraço!

  8. #8