Perguntas sobre 'arithmetic'

16
respostas

Como fazer cálculos com números inteiros e flutuantes, no bash ou em outros idiomas / frameworks?

Usar echo "20+5" literalmente produz o texto " 20+5 ". Qual comando posso usar para obter a soma numérica, 25 neste caso? Além disso, qual é a maneira mais fácil de fazer isso usando apenas o bash para ponto? Por exemplo, echo $((...
14.06.2012 / 16:43
18
respostas

Existe uma maneira de obter o min, max, median e average de uma lista de números em um único comando?

Eu tenho uma lista de números em um arquivo, um por linha. Como posso obter os valores mínimo, máximo, mediano e média ? Eu quero usar os resultados em um script bash. Embora minha situação imediata seja para números inteiros, uma solução...
25.05.2011 / 06:42
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
3
respostas

Bash: double é igual a vs -eq

Estou fazendo uma comparação de inteiros no bash (tentando ver se o usuário está rodando como root), e encontrei duas maneiras diferentes de fazê-lo: Double é igual a: if [ $UID == 0 ] then fi -eq if [ $UID -eq 0 ] then fi Enten...
05.07.2011 / 19:24
6
respostas

Como criar uma seqüência com zeros à esquerda usando a expansão de contraventamento

Quando uso o seguinte, obtenho um resultado como esperado: $ echo {8..10} 8 9 10 Como posso usar essa expansão de chave de maneira fácil, para obter a seguinte saída? $ echo {8..10} 08 09 10 Agora que isso pode ser obtido usando s...
04.01.2013 / 09:41
2
respostas

O que um sinal de dólar seguido por um colchete significa em bash?

Parece que $[expr] realiza uma expansão aritmética exatamente como $((expr)) . Mas não consigo encontrar menção de $[ no manual bash. Este comando não dá resultados: gunzip -c /usr/share/man/man1/bash.1.gz | grep -E '\$\[' O que é...
15.06.2015 / 18:10
4
respostas

Como removo zeros à esquerda da saída de 'date' ou evito a interpretação octal de tais números decimais?

Eu tenho isso: date +"%H hours and %M minutes" Eu uso o festival para dizer isso .. mas diz assim: "zero nove horas" .. Eu quero dizer "nove horas"! mas a data sempre me dá 09 ... então eu me pergunto se o bash pode facilmente tornar i...
03.04.2013 / 04:43
8
respostas

Fazendo cálculos simples na linha de comando usando funções bash: $ 1 dividido por $ 2 (usando bc talvez)

Às vezes, preciso dividir um número por outro. Seria ótimo se eu pudesse definir uma função bash para isso. Até agora, sou forçado a usar expressões como echo 'scale=25;65320/670' | bc mas seria ótimo se eu pudesse definir uma função .bas...
31.01.2012 / 15:12
5
respostas

Verifique se o $ REPLY está em um intervalo de números

Estou escrevendo um script de shell para Linux, usando o Bash, para traduzir qualquer arquivo de vídeo para um MP4. Para isso, estou usando avconv com libvorbis para áudio. Dentro do meu script, tenho uma pergunta para o usuário: rea...
09.03.2014 / 16:55
5
respostas

criando uma seqüência de números, um por linha em um arquivo

Existe uma maneira de criar a partir do nada, um arquivo que é uma sequência de números, começando em um determinado número, um por linha? algo como magic_command start 100 lines 5 > b.txt e, em seguida, b.txt seria 100 101 10...
29.11.2011 / 00:29