GNU/Linux >> Belajar Linux >  >> Linux

Operasi Matematika Bash (Aritmatika Bash) Dijelaskan

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.


Linux
  1. Tanda kurung Dalam Expr Aritmatika:3 * (2 + 1)?

  2. perintah ekspor bash

  3. Jalankan perintah bash pada pipa jenkins

  1. Perintah Bash trap Dijelaskan

  2. Perintah tunggu bash

  3. Bash baca Perintah

  1. Bash Heredoc

  2. Perintah Sumber Bash

  3. Perintah Sejarah di Linux (Riwayat Bash)