Làm thế nào để bạn thêm một số như là một đối số dòng lệnh?


10

Tôi đang cố gắng thêm 1 số từ dòng lệnh và một số như mặc định. Ví dụ: Khi người dùng nhập số 50, tập lệnh sẽ thêm 10 (làm số mặc định).

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

Đây là những gì tôi có cho đến nay.

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

Tôi có cú pháp sai? Tôi không chắc chắn nếu tôi đi đúng hướng. Tôi có thêm số sai không? Tôi có nên sử dụng awk thay thế?

let sum = $default + $number 

Chỉ cần thêm, thay vì echoing và sau đó sử dụng readtrực tiếp, bạn có thể nhập:read -p 'Please enter a number: ' yournumber
Tyþë-Ø

Câu trả lời:


2

Không gian đang gây ra lỗi.

Nếu bạn muốn người dùng nhập số khi anh ta được nhắc là "Vui lòng nhập số:", bạn có thể sử dụng tập lệnh của mình với một số chỉnh sửa như:

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

Kiểm tra:

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

Nếu bạn muốn người dùng nhập số làm đối số cho tập lệnh, bạn có thể sử dụng tập lệnh bên dưới:

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

Kiểm tra:

./temp.sh 50
The sum of 50 and 10 is 60.

3
Tại sao phải chạy bc chỉ để làm số học số nguyên đơn giản?
PM 2Ring

14

Bạn không nên có khoảng trắng nằm giữa "default = 10" & "sum = $", mặc định & number nên có $ trước khi chúng đọc từ các biến.

Kịch bản sau đó hoạt động như mong đợi đối với tôi, khi được viết như dưới đây;

#!/bin/bash

echo -n "Please enter a number: " 
read number 
default=10
sum=$(($default + $number))
echo "The sum of $number and 10 is $sum."

Ồ tôi hiểu rồi! Tôi hiểu rồi Đó chỉ là một vấn đề khoảng cách. Tôi thực sự nghĩ quá. Cảm ơn bạn vì sự giúp đỡ!
techiegeek

3
Lưu ý rằng bạn không cần sử dụng $biểu thức số học bên trong. Ví dụ: thử điều này:num=5;def=10;echo "sum = $((num + def))"
PM 2Ring

4

Đây là cách nhanh nhất để làm những gì bạn đang yêu cầu:

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

Đầu ra:

creme@fraiche:~/$ ./script.sh 50
The sum of 50 + 10 is 60.

1
điều đó có thể nguy hiểm - hãy thử./script.sh '((PATH=0)+(ANY_OTHER_VARNAME=[ANY INTEGER]))'
mikeerv

@mikeerv Rất chính xác, tuy nhiên đối với bài tập tôi không chắc nó có phải là vấn đề không. Cảm ơn bạn đã bình luận của bạn bất kể.
cremefraiche
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.