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 

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.

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

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.

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.