Comment ajoutez-vous un nombre comme argument de ligne de commande?

10

J'essaie d'ajouter 1 numéro à partir de la ligne de commande, et un numéro comme par défaut. Par exemple: Lorsque l'utilisateur tape le nombre 50, le script ajoute 10 (comme numéro par défaut).

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

C'est ce que j'ai jusqu'à présent.

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

La syntaxe est-elle incorrecte? Je ne sais pas si je suis sur la bonne voie. Suis-je en train d'ajouter des chiffres erronés? Dois-je utiliser awk à la place?

let sum = $default + $number 
techiegeek
la source
Juste pour ajouter, au lieu de echoing puis l'utilisation de readdirectement vous pouvez taper:read -p 'Please enter a number: ' yournumber
Tyþë-Ø

Réponses:

2

Les espaces sont à l'origine des erreurs.

Si vous souhaitez que l'utilisateur saisisse le numéro à l'invite "Entrez un nombre:", vous pouvez utiliser votre script avec quelques corrections comme:

#!/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."

Vérifier:

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

Si vous souhaitez que l'utilisateur saisisse le nombre comme argument dans le script, vous pouvez utiliser le script ci-dessous:

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

Vérifier:

./temp.sh 50
The sum of 50 and 10 is 60.
Mandar Shinde
la source
3
Pourquoi prendre la peine d'exécuter bc juste pour faire une simple arithmétique entière?
PM 2Ring
14

Vous ne devriez pas avoir d'espaces entre "default = 10" & "sum = $", aussi & default devrait avoir $ avant eux pour lire les variables.

Le script fonctionne alors comme prévu pour moi, lorsqu'il est écrit comme ci-dessous;

#!/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
la source
Oh je vois! Je l'ai maintenant. C'était juste un problème d'espacement. J'ai vraiment trop réfléchi à cela. Merci pour l'aide!
techiegeek
3
Notez que vous n'avez pas besoin d'utiliser l' $intérieur de l'expression arithmétique. Par exemple, essayez ceci:num=5;def=10;echo "sum = $((num + def))"
PM 2Ring
4

C'est le moyen le plus rapide de faire ce que vous demandez:

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

Production:

creme@fraiche:~/$ ./script.sh 50
The sum of 50 + 10 is 60.
crème fraiche
la source
1
cela pourrait être dangereux - essayez./script.sh '((PATH=0)+(ANY_OTHER_VARNAME=[ANY INTEGER]))'
mikeserv
@mikeserv Très précis, mais pour l'exercice, je ne sais pas si c'est un problème. Merci pour votre commentaire malgré tout.
cremefraiche