Perguntas sobre 'arithmetic'

1
resposta

Cálculo problemático de bc no shell script

No Ubuntu 14.04.1 LTS de 64 bits Estou escrevendo um script de shell e se eu definir o início do sequence usado no for loop com uma variável em vez de um constante Eu tenho um comportamento muito estranho e há muitos erros da calculado...
24.12.2014 / 02:09
0
respostas

bash expansão aritmética parece estar propensa a ataques de injeção

Suponha que você queira que seu script tome variáveis do ambiente: #!/usr/bin/env bash set -eu if (( ${A-} )); then echo true else echo false fi A expansão aritmética parece ser mais razoável aqui para lidar com (empty) , 0 ,...
18.11.2018 / 19:08
6
respostas

Parêntese na expr aritmética: 3 * (2 + 1) ______ qstntxt ___

%code% parece não gostar de parênteses (usado em matemática para especificar a prioridade do operador):

%pre%

Como expressar a prioridade do operador no bash?

    
______ azszpr149832 ___

Outra maneira de usar %code% bash builtin:

%pre%

Nota

Como @ Stéphane Chazelas apontou , em %code% você deve usar %code% para fazer aritmética %code% ou %code% para legibilidade.

Para portabilidade, use %code% como @Bernhard answer .

    
______ azszpr149830 ___

Você pode usar a expansão aritmética.

%pre%

Na minha opinião pessoal, isso parece um pouco melhor do que usar %code% .

De %code%

%bl0ck_qu0te%     
______ azszpr149916 ___

Não há razão para usar %code% para aritmética em shells modernos.

POSIX define o operador de expansão %code% . Então você pode usar isso em todos os shells compatíveis com POSIX (o %code% de todos os Unix-gostos modernos, traço, bash, yash, mksh, zsh, fino, ksh ...).

%pre%

%code% também introduziu um %code% builtin que é transmitido com o mesmo tipo de expressão aritmética, não expande para algo, mas retorna um status de saída com base em se a expressão é resolvida como 0 ou não, como em %code% :

%pre%

No entanto, como a cotação a torna inábil e não muito legível (não na mesma proporção que %code% , é claro), %code% também introduziu uma forma alternativa %code% :

%pre%

, que é muito mais legível e deve ser usado em seu lugar.

%code% e %code% só estão disponíveis em %code% , %code% e %code% . A sintaxe %code% deve ser preferida se a portabilidade para outros shells for necessária, %code% é necessário apenas para shells pré-POSIX semelhantes a Bourne (normalmente o shell Bourne ou versões antigas do shell Almquist).

Na frente não-Bourne, existem alguns shells com operador aritmético integrado:

  • %code% / %code% (na verdade, o primeiro shell Unix com avaliação aritmética incorporada):

    %pre%
  • %code% (com base em %code% )

    %pre%
  • como uma nota de história, a versão original do shell Almquist, como publicado no usenet em 1989, tinha um %code% construído (na verdade, mesclado com %code% ), mas foi removido posteriormente.

______ azszpr149991 ___

%code% é um comando externo, não é uma sintaxe especial do shell. Portanto, se você quiser que %code% veja os caracteres especiais do shell, será necessário protegê-los da análise do shell, citando-os. Além disso, %code% precisa que cada número e operador sejam passados como um parâmetro separado. Assim:

%pre%

A menos que você esteja trabalhando em um antigo sistema unix dos anos 1970 ou 1980, há muito poucas razões para usar %code% . Antigamente, os shells não tinham uma maneira interna de realizar aritmética, e você precisava chamar o utilitário %code% . Todos os shells POSIX possuem aritmética interna por meio da sintaxe expansão aritmética .

%pre%

A construção %code% se expande para o resultado da expressão aritmética (escrita em decimal). Bash, como a maioria das shells, suporta apenas módulos aritméticos inteiros 2 64 (ou módulo 2 32 para versões mais antigas do bash e algumas outras shells em máquinas de 32 bits). p>

O Bash oferece uma sintaxe de conveniência adicional quando você deseja realizar atribuições ou para testar se uma expressão é 0, mas não se importa com o resultado. Esta construção também existe em ksh e zsh, mas não em sh simples.

%pre%

Além da aritmética inteira, %code% oferece algumas funções de manipulação de string. Eles também são incluídos pelos recursos de shells POSIX, exceto por um: %code% testa se a string corresponde ao regexp especificado. Um shell POSIX não pode fazer isso sem ferramentas externas, mas o bash pode com %code% (com um sintaxe diferente de regexp - %code% é uma ferramenta clássica e usa BRE, bash usa ERE).

A menos que você esteja mantendo scripts executados em sistemas de 20 anos, não é necessário saber que %code% já existiu. Use aritmética de shell.

    
______ azszpr149824 ___

Use parênteses com aspas:

%pre%

As citações evitam que o bash interprete os parênteses como a sintaxe bash.

    
______ azszpr349827 ___

Se você tiver bc ...

%pre%     
___

expr parece não gostar de parênteses (usado em matemática para especificar a prioridade do operador): expr 3 * (2 + 1) bash: syntax error near unexpected token '(' Como expressar a prioridade do operador no bash?     
12.08.2014 / 08:09
2
respostas

Atribui identificador variável em loop e ecoa seu valor

Espero que esta pergunta não seja duplicada, pois tenho tentado várias maneiras de resolver esse problema, mas não encontrei nenhuma solução. Eu tenho um loop for no qual gostaria de armazenar uma saída de comando em uma variável cujo nome es...
07.07.2015 / 14:24
2
respostas

Sintaxe aritmética no bash

Estou recebendo o erro abaixo em valores aritméticos #!/bin/bash n=0 line_count=9 line_count=$(line_count)/3 echo $line_count exit 0 o resultado esperado é 3 []$ ./test.sh ./test.sh: line 4: line_count: command not found /3 []$ more te...
16.02.2017 / 13:32
4
respostas

Avaliação de uma expressão e arredondamento de até três casas decimais

Eu tenho uma expressão "5+50*3/20 + (19*2)/7" Eu preciso arredondá-lo para 3 casas decimais. A resposta para isso é 17.92857142857143 . Quando eu uso o script abaixo ele está me dando 17.928 . A resposta deve ser 17.929 . read exp ec...
08.12.2014 / 15:50
3
respostas

Script de shell para dividir números dentro de um arquivo

Eu tenho uma única coluna e 12 linhas. Cada linha tem valores numéricos. Eu quero dividir cada valor de linha por algum número constante (digamos C) usando scripts shell (bash). Como fazer isso ? Obrigado antecipadamente ..     
23.09.2013 / 19:26
1
resposta

Por que o comando factor produz um absurdo em um módulo RSA?

Ok, acho que encontrei uma falha em ... alguma coisa. Eu sinceramente não sei. Este é um cenário tão estranho. Eu estava tentando quebrar uma criptografia assimétrica muito pequena (RSA), assim como um projeto de Prova de Conceito para um de...
18.06.2016 / 00:52
1
resposta

Como pode subtrair 2 flutuantes que foram extraídos de 2 outros arquivos com BASH [duplicado]

Estou tentando obter a diferença entre dois números que tirei de dois arquivos. Acho que meu código fará sentido: Eu tentei fazer isso funcionar por dois métodos diferentes, não funcionou. O que recebo como saída é zero (0). #method 1 di...
12.02.2015 / 02:28
3
respostas

Escrevendo um script de shell para obter a saída de um executável e executar alguns cálculos

Não estou muito familiarizado com o shell script. Eu quero escrever um script de shell para o seguinte pseudo-código: min=some garbage value for(i=1 to N){ // N and n will be taken as input for the shell script. for(j=1 to n){ val...
07.11.2011 / 04:29