Pendahuluan
Operasi matematika dan aritmatika sangat penting dalam skrip Bash. Berbagai tugas otomatisasi memerlukan operasi aritmatika dasar, seperti mengubah suhu CPU ke Fahrenheit. Menerapkan operasi matematika di Bash sederhana dan sangat mudah dipelajari.
Panduan ini mengajarkan Anda cara mengerjakan matematika dasar di Bash dengan berbagai cara.
Prasyarat
- Akses ke baris perintah/terminal.
- Editor teks untuk mengkodekan contoh, seperti nano atau Vi/Vim.
- Pengetahuan dasar tentang skrip Bash.
Mengapa Anda Membutuhkan Matematika di Bash Scripting?
Meskipun matematika bukanlah tujuan utama dari skrip Bash, mengetahui bagaimana melakukan perhitungan penting sangat membantu untuk berbagai kasus penggunaan.
Kasus penggunaan umum meliputi:
- Menambahkan/mengurangi/ mengalikan/membagi bilangan.
- Pembulatan angka.
- Menambah dan mengurangi angka.
- Mengonversi satuan.
- Perhitungan floating-point.
- Menemukan persentase.
- Bekerja dengan basis bilangan yang berbeda (biner, oktal, atau heksadesimal).
Bergantung pada tugas otomatisasi, matematika dasar dan aritmatika dalam skrip Bash membantu melakukan penghitungan cepat, menghasilkan hasil langsung dalam format yang diinginkan.
Perintah dan Metode Matematika Bash
Beberapa perintah Linux memungkinkan melakukan perhitungan dasar dan lanjutan dengan segera. Bagian ini menunjukkan contoh matematika dasar dengan setiap metode.
Perluasan Aritmatika
Cara yang lebih disukai untuk mengerjakan matematika di Bash adalah dengan menggunakan ekspansi aritmatika Shell. Kemampuan bawaan mengevaluasi ekspresi matematika dan mengembalikan hasilnya. Sintaks untuk ekspansi aritmatika adalah:
$((expression))
Sintaksnya terdiri dari:
- Notasi gabungan
(())
yang mengevaluasi ekspresi. - Operator variabel
$
untuk menyimpan hasilnya.
Misalnya, tambahkan dua angka dan gema hasilnya:
echo $((2+3))
Notasi ekspansi aritmatika adalah metode yang disukai saat bekerja dengan skrip Bash. Notasi tersebut sering terlihat bersamaan dengan if
pernyataan dan untuk loop di Bash.
Perintah awk
Perintah awk bertindak sebagai pemilih untuk ekspresi pola. Misalnya, untuk melakukan penjumlahan menggunakan awk
perintah, gunakan contoh pernyataan berikut:
awk 'BEGIN { x = 2; y = 3; print "x + y = "(x+y) }'
Untuk variabel x = 2
dan y = 3
, output mencetak x + y = 5
ke konsol.
Perintah bc
bc
perintah (kependekan dari b asic c alculator) adalah utilitas baris perintah yang merender bahasa bc. Program berjalan sebagai program interaktif atau mengambil input standar untuk melakukan aritmatika presisi arbitrer.
Pipa persamaan dari input standar ke dalam perintah untuk mengambil hasil. Misalnya:
echo "2+3" | bc
Output mencetak hasil perhitungan.
Perintah dc
dc
perintah (kependekan dari d esk c alculator) adalah utilitas kalkulator yang mendukung notasi Polandia terbalik. Program mengambil input standar dan mendukung aritmatika presisi tak terbatas.
Pipa persamaan input standar ke dalam perintah untuk mengambil hasilnya. Misalnya:
echo "2 3 + p" | dc
p
dalam persamaan mengirimkan sinyal cetak ke dc
perintah.
deklarasikan Perintah
Perintah Bash menyatakan memungkinkan perhitungan bilangan bulat. Untuk menggunakan declare
untuk perhitungan, tambahkan -i
pilihan. Misalnya:
declare -i x=2 y=3 z=x+y
Gema setiap variabel untuk melihat hasilnya:
echo $x + $y = $z
Output mencetak setiap variabel ke konsol.
Perintah expr
expr
command adalah utilitas baris perintah lama untuk mengevaluasi aritmatika bilangan bulat. Contoh expr
perintahnya seperti berikut:
expr 2 + 3
Pisahkan angka dan tanda operasi dengan spasi dan jalankan perintah untuk melihat hasil perhitungan.
Perintah faktor
factor
command adalah utilitas baris perintah yang mencetak faktor untuk bilangan bulat positif apa pun, dan hasilnya memfaktorkan menjadi bilangan prima.
Misalnya, untuk mencetak faktor dari angka 100, jalankan:
factor 100
Keluaran akan mencetak bilangan terfaktor.
biarkan Perintah
Perintah Bash let melakukan berbagai operasi aritmatika, bitwise, dan logis. Perintah bawaan hanya berfungsi dengan bilangan bulat. Contoh berikut menunjukkan let
sintaks perintah:
let x=2+3 | echo $x
Output mencetak hasilnya.
Perintah uji
test
perintah di Linux mengevaluasi ekspresi bersyarat dan sering berpasangan dengan pernyataan Bash if. Ada dua variasi untuk sintaks pengujian:
test 2 -gt 3; echo $?
Atau sebagai alternatif:
[ 2 -gt 3 ]; echo $?
test
perintah mengevaluasi apakah dua lebih besar dari (-gt
) tiga. Jika ekspresinya benar, outputnya adalah nol (0
), atau satu (1
) jika salah.
Operator Aritmatika Bash
Bash menawarkan berbagai operator aritmatika untuk berbagai perhitungan dan evaluasi. Operator bekerja dengan let
, declare
, dan ekspansi aritmatika.
Di bawah ini adalah tabel referensi cepat yang menjelaskan operator aritmatika Bash dan fungsinya.
Sintaks | Deskripsi |
---|---|
++x , x++ | Sebelum dan sesudah kenaikan. |
--x , x-- | Sebelum dan sesudah penurunan. |
+ , - , * , / | Penjumlahan, pengurangan, perkalian, pembagian. |
% , ** (atau ^ ) | Modulo (sisa) dan eksponensial. |
&& , || , ! | Logis AND, OR, dan negasi. |
& , | , ^ , ~ | Bitwise AND, OR, XOR, dan negasi. |
<= , < , > , => | Kurang dari atau sama dengan, kurang dari, lebih besar dari, dan lebih besar dari atau sama dengan operator pembanding. |
== , != | Operator perbandingan persamaan dan ketidaksetaraan. |
= | Operator tugas. Menggabungkan dengan operator aritmatika lainnya. |
Cara Mengerjakan Matematika di Bash
Bash menawarkan berbagai cara untuk melakukan perhitungan matematika tergantung pada jenis masalahnya.
Di bawah ini adalah contoh dari beberapa masalah umum yang menggunakan fungsi atau perintah matematika Bash sebagai solusinya. Sebagian besar contoh menggunakan notasi ekspansi aritmatika Bash. Bagian ini juga membahas kesalahan matematika Bash yang umum dan cara mengatasinya.
Matematika dengan Bilangan Bulat
Notasi ekspansi aritmatika adalah yang paling sederhana untuk digunakan dan dimanipulasi ketika bekerja dengan bilangan bulat. Misalnya, buat ekspresi dengan variabel dan hitung hasilnya segera:
echo $((x=2, y=3, x+y))
Untuk mengevaluasi beberapa ekspresi, gunakan notasi majemuk, simpan setiap perhitungan dalam variabel, dan gema hasilnya. Misalnya:
((x=2, y=3, a=x+y, b=x*y, c=x**y)); echo $a, $b, $c
Saat mencoba membagi, perhatikan hal berikut:
1. Pembagian dengan nol (0) tidak mungkin dan menimbulkan kesalahan.
2. Ekspansi aritmatika Bash tidak mendukung aritmatika titik-mengambang. Saat mencoba membagi dalam kasus ini, output menunjukkan nol (0).
Hasil pembagian bilangan bulat harus bilangan bulat.
Menambah dan Mengurangi
Ekspansi aritmatika Bash menggunakan penambahan dan pengurangan bilangan bulat gaya-C. Operator untuk penambahan atau pengurangan adalah sebelum atau sesudah variabel, menghasilkan perilaku yang berbeda.
Jika operator berada sebelum variabel (++x
atau --x
), kenaikan atau penurunan terjadi sebelum penetapan nilai. Untuk melihat cara kerja pra-peningkatan, jalankan baris berikut:
number=1
echo $((++number))
Variabel bertambah, dan nilai baru segera tersedia.
Jika operator setelah variabel (x++
atau x--
), kenaikan atau penurunan terjadi setelah penetapan nilai. Untuk melihat cara kerja pasca-peningkatan, jalankan yang berikut:
number=1
echo $((number++))
echo $number
Variabel tetap sama dan meningkat dalam penggunaan berikut.
Aritmatika titik-mengambang
Meskipun ekspansi aritmatika Bash tidak mendukung aritmatika titik-mengambang, ada cara lain untuk melakukan perhitungan seperti itu. Di bawah ini adalah empat contoh penggunaan perintah atau bahasa pemrograman yang tersedia di sebagian besar sistem Linux.
1. Menggunakan awk
hingga 6 tempat desimal:
awk 'BEGIN { x = 2.3; y = 3.2; print "x * y = "(x * y) }'
2. Menggunakan bc
dengan -l
tandai hingga 20 tempat desimal:
echo "2.3 * 3.2" | bc -l
3. Menggunakan Perl hingga 20 tempat desimal:
perl -e 'print 2.3*3.2'
Perl sering kali sudah diinstal sebelumnya di sistem Linux.
4. Menggunakan printf dan ekspansi aritmatika untuk mengubah pecahan menjadi desimal:
printf %.<precision>f "$((10**<multiplier> * <fraction>))e-<multiplier>"
Presisi menentukan berapa banyak tempat desimal, sedangkan pengali adalah pangkat sepuluh. Jumlahnya harus lebih rendah dari pengganda. Jika tidak, rumus menempatkan nol di hasil akhir.
Misalnya, konversikan 1/3 ke desimal dengan presisi dua:
printf %.2f "$((10**3 * 1/3))e-3"
Hindari metode ini untuk perhitungan yang tepat dan gunakan hanya untuk sejumlah kecil tempat desimal.
Menghitung Persentase dan Pembulatan
Berikut adalah dua cara untuk menghitung persentase di Bash.
1. Gunakan printf
dengan ekspansi aritmatika.
printf %.2f "$((10**4 * part/total))e-4"%
Misalnya, hitung berapa persen 40 dari 71:
printf %.2f%% "$((10**4 * 40/71))e-4"%
Ketepatannya terbatas pada dua tempat desimal, dan jawabannya selalu dibulatkan ke bawah.
2. Gunakan awk
dengan printf
untuk presisi yang lebih baik:
awk 'BEGIN { printf "%.2f%%", (part/total*100) }'
Misalnya, hitung berapa persen 40 dari 71 dengan:
awk 'BEGIN { printf "%.2f%%", (40/71*100) }'
Jawaban dibulatkan ke atas jika tempat desimal ketiga lebih tinggi dari lima, memberikan akurasi yang lebih baik.
Menemukan Faktorial di Shell
Untuk menghitung faktorial untuk angka apa pun, gunakan fungsi Bash rekursif.
Untuk bilangan kecil, ekspansi aritmatika Bash berfungsi dengan baik:
factorial () {
if (($1 > 1))
then
echo $(( $( factorial $(($1 - 1)) ) * $1 ))
else
echo 1
return
fi
}
Untuk memeriksa faktorial suatu bilangan, gunakan sintaks berikut:
factorial 5
Metodenya lambat dan presisinya terbatas (hingga faktorial 20).
Untuk presisi yang lebih tinggi, hasil yang lebih cepat, dan angka yang lebih besar, gunakan bc
memerintah. Misalnya:
echo 'define factorial(x) {if (x>1){return x*factorial(x-1)};return 1}
factorial(<number>)' | bc
Ganti <number>
dengan bilangan faktorial yang akan dihitung. Misalnya, untuk mencari faktorial dari 50, gunakan:
echo 'define factorial(x) {if (x>1){return x*factorial(x-1)};return 1} factorial(50)' | bc
Output mencetak hasil perhitungan ke terminal.
Membuat Fungsi Kalkulator Bash
Buat fungsi kalkulator Bash sederhana dengan kode berikut:
calculate() { printf "%s\n" "[email protected]" | bc -l; }
Fungsi mengambil input pengguna dan menyalurkan persamaan ke bc
memerintah.
Atau, untuk menghindari penggunaan program, gunakan ekspansi aritmatika Bash dalam suatu fungsi:
calculate() { echo $(("[email protected]")); }
Ingatlah batasan ekspansi aritmatika. Aritmatika titik-mengambang tidak tersedia dengan fungsi ini.
Simpan fungsinya ke .bashrc file untuk selalu memiliki fungsi yang tersedia di shell.
Menggunakan Basis Aritmatika yang Berbeda
Secara default, ekspansi aritmatika Bash menggunakan basis sepuluh angka. Untuk mengubah basis angka, gunakan format berikut:
base#number
Di mana basis adalah bilangan bulat antara dua dan 64.
Misalnya, untuk melakukan perhitungan biner (basis 2), gunakan:
echo $((2#1010+2#1010))
Perhitungan oktal (basis 8) menggunakan awalan 0 sebagai alias. Misalnya:
echo $((010+010))
Perhitungan heksadesimal (basis 16) memungkinkan penggunaan 0x sebagai awalan dasar. Misalnya:
echo $((0xA+0xA))
Output mencetak hasil dalam basis sepuluh untuk perhitungan apa pun.
Konversi Satuan
Buat skrip Bash sederhana untuk mengonversi unit:
1. Buka editor teks, seperti Vim, dan buat convert.sh naskah. Misalnya:
vim convert.sh
2. Tempel kode berikut:
#!/bin/bash
## Program for feet and inches conversion
echo "Enter a number to be converted:"
read number
echo $number feet to inches:
echo "$number*12" | bc -l
echo $number inches to feet:
echo "$number/12" | bc -l
Program ini menggunakan Bash read untuk mengambil input pengguna dan menghitung konversi dari kaki ke inci dan dari inci ke kaki.
3. Simpan skrip dan tutup:
:wq
4. Jalankan skrip Bash dengan:
. convert.sh
Masukkan nomor dan lihat hasilnya. Untuk konversi yang berbeda, gunakan rumus konversi yang sesuai.
Memecahkan "kesalahan bash:nilai terlalu besar untuk basis"
Saat bekerja dengan basis angka yang berbeda, tetap dalam batas basis angka. Misalnya, bilangan biner menggunakan 0 dan 1 untuk mendefinisikan bilangan:
echo $((2#2+2#2))
Mencoba menggunakan 2#2
sebagai angka menampilkan kesalahan:
bash: 2#2: value too great for base (error token is "2#2")
Nomor tersebut bukan format yang benar untuk penggunaan biner. Untuk mengatasi kesalahan, konversikan angka ke biner untuk melakukan perhitungan dengan benar:
echo $((2#10+2#10))
Bilangan biner 10
adalah 2
di basis sepuluh.
Memecahkan "kesalahan sintaks:operator aritmatika tidak valid"
Notasi ekspansi aritmatika Bash hanya berfungsi untuk perhitungan bilangan bulat. Coba tambahkan dua angka floating-point, misalnya:
echo $((2.1+2.1))
Perintah mencetak kesalahan:
bash: 2.1+2.1: syntax error: invalid arithmetic operator (error token is ".1+2.1")
Untuk mengatasi kesalahan, gunakan aritmatika bilangan bulat biasa atau metode lain untuk menghitung persamaan.
Memecahkan "kesalahan bash:ekspresi integer diharapkan"
Saat membandingkan dua angka, test
perintah membutuhkan bilangan bulat. Misalnya, coba perintah berikut:
[ 1 -gt 1.5 ]
Output mencetak kesalahan:
bash: [: 1.5: integer expression expected
Atasi kesalahan dengan membandingkan nilai bilangan bulat.