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

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

Re: [shell-script] Re: Operação Bitwise em Bash


From: Alfredo Casanova
Subject: Re: [shell-script] Re: Operação Bitwise em Bash
Date: Mon, 21 Oct 2019 12:22:16 -0300

Julio, confirmei aqui e, de fato, o readarray é um alias pro mapfile

$ readarray --help
readarray: readarray [-d delim] [-n count] [-O origin] [-s count] [-t] [-u fd] [-C callback] [-c quantum] [array]
    Read lines from a file into an array variable.
   
    A synonym for `mapfile'.

On Sat, Oct 19, 2019 at 12:03 AM 'Julio C. Neves' address@hidden [shell-script] <address@hidden> wrote:
 

Acho que o readarray é um aliás do mapfile. Qdo ligar o computador, te mando o que escrevi sobre esse cmd.
Bom fim de semana

Em sex, 18 de out de 2019 12:08, Alfredo Casanova address@hidden [shell-script] <address@hidden> escreveu:
 

Eu li sobre a readarray essa semana, Júlio. Mas como fiz o script pra solucionar uma busca que precisamos aqui no trabalho e vai rodar num ambiente que eu controlo, não vi grandes problemas. 
O redirect pro stderr eu vou colocar mesmo :)

Valeu!

On Fri, Oct 18, 2019 at 11:42 AM 'Julio C. Neves' address@hidden [shell-script] <address@hidden> wrote:
 

Troque:
echo "uso: ./$0 10.0.0.0/8 10.10.10.10/24"
por:
echo "uso: ./$0 10.0.0.0/8 10.10.10.10/24" >&2

Eu não usaria o readarray com a opção -d pq ele só foi implementada na última versão do bash (4.4) o que a torna incompatível com diversos ambientes.

Abraços,
Julio

» Não tem tempo para fazer um curso presencial?
» Na sua cidade não tem nenhum bom curso de Linux?
» Em outubro abriremos uma semana de inscrições
» para uma nova turma. Veja mais detalhes em:

Também damos treinamento em sua empresa
em qualquer cidadecom certificado e nota fiscal.







Em qui, 17 de out de 2019 às 10:50, Alfredo Casanova address@hidden [shell-script] <address@hidden> escreveu:
 

Terminei o código (não sei se tá certo pq networking não é a minha MESMO, tive q pegar ajuda com vários amigos)
Nos testes que fiz, tá funcionando.
Se alguém quiser dar uma olhada (e corrigir, caso encontre erros), segue:



On Thu, Oct 17, 2019 at 10:18 AM 'Julio C. Neves' address@hidden [shell-script] <address@hidden> wrote:
 

Arkanon!!!!!! Que bom tê-lo de volta na lista!!! Nos conte como anda o LSD, pois tem tudo a ver com Shell.

A ideia era te cumprimentar, mas só para não sair do escopo da lista e já que vc falou em bc e [io]base, vou mostrar uma coisa, que por não ser muito conhecida, alguns pensam ser um erro do utilitário:

$ bc <<< "ibase=8; obase=16; 10+10"
12
$ bc <<< "obase=8; ibase=16; 10+10"
40

Isso ocorreu pq na 1a linha primeiro declaramos a input base como 8 e qdo declaramos a 2a como 16 ele já entendeu que esse 16 era na base 8, ou seja 14.

Conclusão: qdo for declarar a duas bases, declare 1o a de saída.
 
Abraços,
Julio

» Não tem tempo para fazer um curso presencial?
» Na sua cidade não tem nenhum bom curso de Linux?
» Em outubro abriremos uma semana de inscrições
» para uma nova turma. Veja mais detalhes em:

Também damos treinamento em sua empresa
em qualquer cidadecom certificado e nota fiscal.







Em qua, 16 de out de 2019 às 19:52, Arkanon address@hidden [shell-script] <address@hidden> escreveu:
 

O bash considera números iniciando com 0 como na base octal:
$  echo $(( 01010 & 01010 ))
520

Se não começar com 0, considerará na base decimal:
$  echo $(( 1010 & 1010 ))
1010

Você pode indicar a base explicitamente:
$  echo $(( 8#1010 & 8#1010 ))
520
$  echo $(( 10#01010 & 10#01010 ))
1010

Portanto, se quer que seja considerada a base binária, indique-a:
$  echo $(( 2#00001010 & 2#00001010 ))
10
$  echo $(( 2#1010 & 2#1010 ))
10

Aliás, a base hexadecimal também tem sua sintaxe específica:
$  echo $(( 0x01010 & 0x01010 ))
4112
$  echo $(( 16#01010 & 16#01010 ))
4112

Observe que o resultado é dado na base decimal. Se quiser o resultado na mesma base de entrada, pode convertê-lo. Aqui tem algumas sugestões de procedimento:

$ dec=844
$ printf '%x\n' $dec # para hexadecimal
34c
$ printf '%X\n' $dec
34C
$ printf '%o\n' $dec # para octal
1514
$ bc <<< "obase=2;$dec" # para binario
1101001100  $ dec=844
$ bc <<< "obase=21;$dec" # para base 21 -> QUALQUER BASE
01 19 04

Att,

Em qua, 16 de out de 2019 às 19:25, Alfredo Casanova address@hidden [shell-script] <address@hidden> escreveu:
 

Pelo visto ele está fazendo bitwise comparando 1.100 com 1.010.

Como fugir disso?


Em qua, 16 de out de 2019 19:07, Alfredo Casanova <address@hidden> escreveu:
Galera, to fazendo um script aqui pra detectar se uma sub-rede menos abrangente está compreendida dentro de outra mais abrangente (exemplo: saber se a rede 10.100.100.128/25 está dentro da rede 10.100.100.0/24)

E aí no meio das operacoes de bitwise me peguei com um erro que nao consigo explicar:

$ echo $(( 11111111 & 11111111))
11111111
$ echo $(( 11111111 & 11111110))
11111110

Essas duas operações estão com comportamento adequado
Porém:

$ echo $(( 00001010 & 00001010 ))
520
$ echo $(( 00001010 & 00001100 ))
512

eu não faço ideia do q está acontecendo nesses casos.
Alguém ilumina?

--
[]'s
Alfredo Tristão Casanova .͘.
Linux User #228230
tel: +55 61 9655 9619



--
(o_  @arkanon  (Twitter)     __o
//\   address@hidden   _`\<,
V_/_      www.lsd.org.br  (_)/(_)
---------------------------------



--
[]'s
Alfredo Tristão Casanova .͘.
Linux User #228230
tel: +55 61 9655 9619



--
[]'s
Alfredo Tristão Casanova .͘.
Linux User #228230
tel: +55 61 9655 9619



--
[]'s
Alfredo Tristão Casanova .͘.
Linux User #228230
tel: +55 61 9655 9619

reply via email to

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