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 

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.

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

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.

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
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.