Як ви додаєте число як аргумент командного рядка?


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 

Просто додайте, замість echoing та потім використання readбезпосередньо ви можете набрати:read -p 'Please enter a number: ' yournumber
Tyþë-Ø

Відповіді:


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

15

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

Потім сценарій працює так, як очікувалося для мене, коли він написаний як нижче;

#!/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 2Рінь

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.