Bagaimana Anda menambahkan angka sebagai argumen baris perintah?

10

Saya mencoba untuk menambahkan 1 angka dari baris perintah, dan satu angka seperti default. Misalnya: Ketika pengguna mengetikkan angka 50, skrip akan menambahkan 10 (sebagai nomor default).

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

Inilah yang saya miliki sejauh ini.

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

Apakah saya salah sintaks? Saya tidak yakin apakah saya berada di jalur yang benar. Apakah saya salah menambahkan angka? Haruskah saya menggunakan awk saja?

let sum = $default + $number 
techiegeek
sumber
Hanya dengan menambahkan, alih-alih menggunakan echodan kemudian readlangsung Anda dapat mengetik:read -p 'Please enter a number: ' yournumber
Tyþë-Ø

Jawaban:

2

Spasi menyebabkan kesalahan.

Jika Anda ingin pengguna memasukkan nomor ketika diminta sebagai "Silakan masukkan nomor:", Anda dapat menggunakan skrip Anda dengan beberapa koreksi sebagai:

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

Memeriksa:

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

Jika Anda ingin pengguna memasukkan nomor sebagai argumen ke skrip, Anda dapat menggunakan skrip di bawah ini:

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

Memeriksa:

./temp.sh 50
The sum of 50 and 10 is 60.
Mandar Shinde
sumber
3
Mengapa repot menjalankan bc hanya untuk melakukan aritmatika integer sederhana?
PM 2Ring
14

Anda seharusnya tidak memiliki spasi di antara "default = 10" & "jumlah = $", juga default & angka harus memiliki $ sebelum mereka membaca dari variabel.

Script kemudian berfungsi seperti yang diharapkan untuk saya, ketika ditulis seperti di bawah ini;

#!/bin/bash

echo -n "Please enter a number: " 
read number 
default=10
sum=$(($default + $number))
echo "The sum of $number and 10 is $sum."
Chris Davidson
sumber
Oh begitu! Aku mengerti sekarang. Itu hanya masalah jarak. Saya benar-benar memikirkan hal ini. Terima kasih atas bantuannya!
techiegeek
3
Perhatikan bahwa Anda tidak perlu menggunakan bagian $dalam ekspresi aritmatika. Misalnya, coba ini:num=5;def=10;echo "sum = $((num + def))"
PM 2Ring
4

Ini adalah cara tercepat untuk melakukan apa yang Anda minta:

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

Keluaran:

creme@fraiche:~/$ ./script.sh 50
The sum of 50 + 10 is 60.
Cremefraiche
sumber
1
itu bisa berbahaya - coba./script.sh '((PATH=0)+(ANY_OTHER_VARNAME=[ANY INTEGER]))'
mikeserv
@ mikeserv Sangat akurat, namun untuk latihan, saya tidak yakin apakah ini merupakan masalah. Terima kasih atas komentar Anda.
cremefraiche