Como você adiciona um número como um argumento de linha de comando?

Estou tentando adicionar 1 número da linha de comando e um número como padrão. Por exemplo: Quando o usuário digita o número 50, o script adicionará 10 (como o número padrão).

./script 50 The sum of 50+ 10 is 60. 

Isso é o que eu tenho até agora.

echo -n "Please enter a number: " read number default = 10 sum = $((default + number)) // this line does not seem to work echo "The sum of $number and 10 is $sum." 

A sintaxe está errada? Não tenho certeza se estou no caminho certo. Estou adicionando os números errados? Devo usar o awk em vez disso?

let sum = $default + $number 

Comentários

  • Apenas para adicionar, em vez de echo ing e depois o uso de read você pode digitar diretamente: read -p 'Please enter a number: ' yournumber

Resposta

Os espaços estão causando os erros.

Se você quiser que o usuário insira o número quando for solicitado como “Digite um número:”, você pode usar o seu script com algumas correções como:

#!/bin/bash echo -n "Please enter a number: " read number default=10 sum=`echo "$number + $default" | bc` echo "The sum of $number and 10 is $sum." 

Verifique:

./temp.sh Please enter a number: 50 The sum of 50 and 10 is 60. 

Se você quiser nos er para inserir o número como um argumento para o script, você pode usar o script abaixo:

#!/bin/bash number="$1" default=10 sum=`echo "$number + $default" | bc` echo "The sum of $number and 10 is $sum." 

Verifique:

./temp.sh 50 The sum of 50 and 10 is 60. 

Comentários

  • Por que se preocupar em executar o bc apenas para fazer aritmética com números inteiros simples?

Resposta

Você não deve ter espaços entre “default = 10” & “sum = $”, também padrão & número deve ter $ antes deles para ler as variáveis.

O script funciona conforme o esperado para mim, quando escrito como abaixo;

#!/bin/bash echo -n "Please enter a number: " read number default=10 sum=$(($default + $number)) echo "The sum of $number and 10 is $sum." 

Comentários

  • Ah, entendo! Agora eu entendi. Foi apenas um problema de espaçamento. Eu realmente pensei sobre isso. Obrigado pela ajuda!
  • Observe que você não ' t precisa usar o $ dentro da expressão aritmética. Por exemplo, tente isto: num=5;def=10;echo "sum = $((num + def))"

Resposta

Esta é a maneira mais rápida de fazer o que você está pedindo:

#!/bin/bash echo "The sum of $1 + 10 is $(($1 + 10))." 

Resultado:

creme@fraiche:~/$ ./script.sh 50 The sum of 50 + 10 is 60. 

Comentários

  • que pode ser perigoso – tente ./script.sh '((PATH=0)+(ANY_OTHER_VARNAME=[ANY INTEGER]))'
  • @mikeserv Muito preciso, porém para o exercício eu ' m não tenho certeza se é uma preocupação. Obrigado por seu comentário de qualquer maneira.

Deixe uma resposta

O seu endereço de email não será publicado. Campos obrigatórios marcados com *