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
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?
shell-script
Isuru
sumber
sumber
Jawaban:
Pertama, Anda harus menyingkirkan ruang untuk tugas, misalnya
maka Anda harus mengubah
'
ke`
atau lebih baik ke$()
:alih-alih menggunakan
expr
Anda juga dapat melakukan perhitungan langsung di shell Anda:sumber
expr
daripada$((...))
keinginan untuk menjadi portabel untuk shell Bourne klasik, maka itu ide yang baik untuk menghindari$(...)
juga.$()
? Sejauh yang saya tahu itu diperlukan oleh posix, misalnya semua kerang yang kompatibel dengan$()
$(…)
, tetapi sudah hampir mati (mungkin seseorang di suatu tempat masih berjalan/bin/sh
di Solaris).$(…)
–– atau setidaknya, tidak semua versi.Anda mungkin salah membaca backtick sebagai tanda kutip tunggal di baris:
Lihat Greg's Wiki
$(...)
sebagai gantinya menggunakan .Ini berfungsi seperti yang diharapkan:
Perhatikan juga tidak ada celah di sekitar tanda sama dengan (penugasan variabel).
sumber
expr
adalah program eksternal yang digunakan oleh Bourne shell (yaitu sh). Bourne shell awalnya tidak memiliki mekanisme untuk melakukan aritmatika sederhana. Ini menggunakanexpr
program 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.
Dalam bash (bourne again shell) ia memiliki systax berikut, ia tidak akan menggunakan program eksternal
expr
.jika kita ingin menggunakan program eksternal
expr
. kami memiliki systax berikut:sumber
Jika Anda menggunakan bash, Anda bisa melakukan sesuatu seperti ini:
sumber
sumber
sumber
Anda dapat menggunakan backtick tunggal ( `kunci)
sumber
$( ... )
sebagai gantinya di shell. Selain itu, masalahnya adalah bahwa OP menggunakan ruang di mana mereka seharusnya tidak.sumber
sumber