Как добавить число в качестве аргумента командной строки?

10

Я пытаюсь добавить 1 номер из командной строки и один номер, как по умолчанию. Например: когда пользователь вводит число 50, скрипт добавляет 10 (по умолчанию).

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

Это то, что я до сих пор.

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

У меня неправильный синтаксис? Я не уверен, что я на правильном пути. Я неправильно добавляю числа? Должен ли я использовать вместо этого awk?

let sum = $default + $number 
techiegeek
источник
Просто чтобы добавить вместо непосредственного echoиспользования, readвы можете набрать:read -p 'Please enter a number: ' yournumber
Ty canë-Ø

Ответы:

2

Пробелы вызывают ошибки.

Если вы хотите, чтобы пользователь вводил число, когда ему предлагается «Пожалуйста, введите число:», вы можете использовать свой сценарий с некоторыми исправлениями, такими как:

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

Проверьте:

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

Если вы хотите, чтобы пользователь ввел число в качестве аргумента скрипта, вы можете использовать скрипт ниже:

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

Проверьте:

./temp.sh 50
The sum of 50 and 10 is 60.
Мандар Шинде
источник
3
Зачем запускать bc просто для выполнения простой целочисленной арифметики?
PM 2Ring 12.12.14
14

У вас не должно быть пробелов между "default = 10" и "sum = $", также default & number должно иметь $ перед тем, как они будут считываться из переменных.

Сценарий тогда работает, как и ожидалось, когда написано, как показано ниже;

#!/bin/bash

echo -n "Please enter a number: " 
read number 
default=10
sum=$(($default + $number))
echo "The sum of $number and 10 is $sum."
Крис Дэвидсон
источник
О, я вижу! Я понял. Это была просто проблема с пробелами. Я действительно над этим подумал. Спасибо вам за помощь!
techiegeek
3
Обратите внимание, что вам не нужно использовать $внутри арифметического выражения. Например, попробуйте это:num=5;def=10;echo "sum = $((num + def))"
PM 2Ring
4

Это самый быстрый способ сделать то, что вы просите:

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

Вывод:

creme@fraiche:~/$ ./script.sh 50
The sum of 50 + 10 is 60.
сметана
источник
1
это может быть опасно - попробуйте./script.sh '((PATH=0)+(ANY_OTHER_VARNAME=[ANY INTEGER]))'
mikeserv
@mikeserv Очень точный, однако для упражнения я не уверен, что это проблема. Спасибо за ваш комментарий независимо.
Cremefraiche