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

10

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

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

É isso 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."

Tenho a sintaxe errada? Não tenho certeza se estou no caminho certo. Estou adicionando os números incorretos? Devo usar o awk?

let sum = $default + $number 
techiegeek
fonte
Apenas para adicionar, em vez de echoing e, em seguida, o uso de readdiretamente, você pode digitar:read -p 'Please enter a number: ' yournumber
Tyþë-Ø 16/06/19

Respostas:

2

Os espaços estão causando os erros.

Se você deseja que o usuário insira o número quando for solicitado como "Digite um número:", poderá usar 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."

Verifica:

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

Se você deseja que o usuário insira o número como argumento no script, use o script abaixo:

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

Verifica:

./temp.sh 50
The sum of 50 and 10 is 60.
Mandar Shinde
fonte
3
Por que se preocupar em executar o bc apenas para fazer uma aritmética inteira simples?
PM 2Ring
14

Você não deve ter espaços entre "default = 10" e "sum = $", também o default & number deve ter $ antes deles para ler as variáveis.

O script então funciona como 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."
Chris Davidson
fonte
Ah eu vejo! Agora eu entendi. Foi apenas uma questão de espaçamento. Eu realmente pensei sobre isso. Obrigado pela ajuda!
techiegeek
3
Observe que você não precisa usar a $expressão aritmética interna. Por exemplo, tente o seguinte:num=5;def=10;echo "sum = $((num + def))"
PM 2Ring
4

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

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

Resultado:

creme@fraiche:~/$ ./script.sh 50
The sum of 50 + 10 is 60.
cremefraiche
fonte
1
que poderia ser perigoso - tentativa./script.sh '((PATH=0)+(ANY_OTHER_VARNAME=[ANY INTEGER]))'
mikeserv
@mikeserv Muito preciso, no entanto, para o exercício, não tenho certeza se é uma preocupação. Obrigado pelo seu comentário, independentemente.
Cremefraiche