คุณจะเพิ่มตัวเลขเป็นอาร์กิวเมนต์บรรทัดคำสั่งได้อย่างไร


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 

เพียงเพิ่มแทนที่จะใช้echoแล้ว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 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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.