Menambahkan dua angka menggunakan expr

13

Saya sedang belajar scripting Shell untuk diploma di bidang TI yang saya lakukan saat ini. Saya mencoba menulis skrip kecil yang menambahkan dua angka seperti yang ditunjukkan pada salah satu tutorial yang kami berikan.

echo "Enter two numbers"
read num1 num2
sum = 'expr $num1 + $num2'
echo "The sum is = $sum"

Namun ketika saya memberikan izin eksekusi dan menjalankan skrip, itu memberi saya kesalahan ini.

sum: =. No such file or directory.
sum: expr $num1 + $num2: No such file or directory

masukkan deskripsi gambar di sini

Saya mencoba menjalankan ini pada Ubuntu dan Fedora tetapi kesalahan yang sama terjadi. Adakah yang bisa memberi tahu saya apa yang saya lewatkan di sini?

Isuru
sumber

Jawaban:

39

Pertama, Anda harus menyingkirkan ruang untuk tugas, misalnya

sum='expr $num1 + $num2'

maka Anda harus mengubah 'ke `atau lebih baik ke $():

sum=$(expr "$num1" + "$num2")

alih-alih menggunakan exprAnda juga dapat melakukan perhitungan langsung di shell Anda:

sum=$((num1 + num2))
Ulrich Dangel
sumber
3
Jika motivasi untuk menggunakan exprdaripada $((...))keinginan untuk menjadi portabel untuk shell Bourne klasik, maka itu ide yang baik untuk menghindari $(...)juga.
Alan Curry
2
@AlanCurry apakah ada cangkang yang tidak mendukung $()? Sejauh yang saya tahu itu diperlukan oleh posix, misalnya semua kerang yang kompatibel dengan $()
posix
1
@UlrichDangel Shell Bourne asli tidak punya $(…), tetapi sudah hampir mati (mungkin seseorang di suatu tempat masih berjalan /bin/shdi Solaris).
Gilles 'SO- stop being evil'
C Shell tidak mendukung $(…)–– atau setidaknya, tidak semua versi.
Scott
Apa tujuan dari penawaran ganda di sekitar variabel?
kojow7
9

Anda mungkin salah membaca backtick sebagai tanda kutip tunggal di baris:

sum = 'expr $num1 + $num2'

Lihat Greg's Wiki$(...) sebagai gantinya menggunakan .

Ini berfungsi seperti yang diharapkan:

sum=$(expr "$num1" + "$num2")

Perhatikan juga tidak ada celah di sekitar tanda sama dengan (penugasan variabel).

jasonwryan
sumber
1

expradalah program eksternal yang digunakan oleh Bourne shell (yaitu sh). Bourne shell awalnya tidak memiliki mekanisme untuk melakukan aritmatika sederhana. Ini menggunakan exprprogram eksternal dengan bantuan backtick.

Backtick ( ` ) sebenarnya disebut substitusi perintah. Substitusi perintah adalah mekanisme di mana shell melakukan serangkaian perintah yang diberikan dan kemudian mengganti output mereka di tempat perintah.

sum=`expr $num1 + $num2`

Dalam bash (bourne again shell) ia memiliki systax berikut, ia tidak akan menggunakan program eksternal expr.

sum=$((num1+num2))

jika kita ingin menggunakan program eksternal expr. kami memiliki systax berikut:

sum=$(expr $num1 + $num2)
Premraj
sumber
0

Jika Anda menggunakan bash, Anda bisa melakukan sesuatu seperti ini:

sum=$((num1+num2))
Melompat Kelinci
sumber
-1
#!/bin/bash
function add()
{
sum=`expr $a + $b`
echo "Sum is :$sum";
}

echo "Enter the value of a";
read a
echo "Enter the valure of b";
read b
add
Imtiyaz
sumber
juga tambahkan beberapa deskripsi tentang kode dan apa manfaatnya untuk menyelesaikan pertanyaan?
Tejas
-1

echo "enter first no :"; read a
echo "enter second no :"; read b
echo "sum = `expr $a + $b`"
pandu raju
sumber
-2

Anda dapat menggunakan backtick tunggal ( `kunci)

sahare prashant
sumber
1
Ini adalah backtick, dan disarankan untuk digunakan $( ... )sebagai gantinya di shell. Selain itu, masalahnya adalah bahwa OP menggunakan ruang di mana mereka seharusnya tidak.
vonbrand
-2
echo a 
read a
echo b
read b
c=`expr $a + $b`
echo $c
prasanna
sumber
-3
echo "addition of two number"

echo "enter a number"
read a
echo "enter a number"
read b

c=`expr $a + $b`

echo $c
kishan
sumber
3
Ini tidak menjawab pertanyaan. Beberapa penjelasan akan membantu.
Bernhard