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?


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))

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


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)


-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

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

-2

Anda dapat menggunakan backtick tunggal ( `kunci)


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


-3
echo "addition of two number"

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

c=`expr $a + $b`

echo $c

3
Ini tidak menjawab pertanyaan. Beberapa penjelasan akan membantu.
Bernhard
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.