GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana Mengevaluasi String sebagai Angka di Bash

Seperti semuanya adalah file di Linux, semuanya adalah string di bash.

Ya! Secara teknis, tidak ada tipe data di Bash. Pada dasarnya, variabel Bash hanyalah string karakter.

Dan itu menimbulkan masalah ketika Anda mencoba melakukan operasi aritmatika di bash. Angka yang Anda coba tambahkan memberikan hasil yang aneh.

[email protected]:~$ sum=3+6
[email protected]:~$ echo $sum
3+6

Untuk mengonversi string menjadi bilangan bulat di bash, bungkus dengan $((X)). Seperti ini:

$((string))

Jika string memiliki nomor yang dapat diidentifikasi, itu akan diperlakukan sebagai nomor. Contoh yang saya tunjukkan di atas dapat diperbaiki sebagai:

[email protected]:~$ sum=$((3+6))
[email protected]:~$ echo $sum
9
Apa pun yang Anda lakukan di dalam $((...)) dianggap sebagai operasi aritmatika.

Mari kita lihat konversi string menjadi angka lebih detail sehingga Anda dapat menggunakan perhitungan aritmatika di bash.

Mengonversi variabel string menjadi angka

Mari kita nyatakan beberapa "angka" yang pada dasarnya adalah string karakter.

[email protected]:~$ a=11
[email protected]:~$ b=3

Anda dapat memeriksa nomor yang ditetapkan:

[email protected]:~$ echo $a
11
[email protected]:~$ echo $b
3

Sekarang mari kita coba menjumlahkan kedua angka dan menyimpan nilainya dalam variabel ketiga c :

[email protected]:~$ c=$a+$b
[email protected]:~$ echo $c
11+3

Seperti yang Anda lihat pada output di atas, c juga diperlakukan sebagai string.

Agar penambahan berhasil, Anda perlu "mengubahnya" melalui ekspansi aritmatika:

[email protected]:~$ c=$(($a+$b))
[email protected]:~$ echo $c
14

Perhatikan bahwa c sebenarnya masih berupa string, sampai Anda secara implisit menggunakan ekspansi aritmatika yang sama lagi untuk operasi lain yang akan saya bahas sebentar lagi.

[email protected]:~$ c=$((5))

Di atas setara dengan:

[email protected]:~$ c=5

Mari kita gunakan variabel ketiga d untuk operasi lain:

[email protected]:~$ d=10

Semua deklarasi implisit ini masih berupa string. Ini sama dengan bagaimana saya mendefinisikan a dan b sebelumnya.

Sekarang untuk operasi kedua:

[email protected]:~$ e=$(($a+$b*$c-$d))
[email protected]:~$ echo $e
16

Dalam ekspresi di atas, produk dari b dan c dihitung terlebih dahulu dan akhirnya penjumlahan dan pengurangan mengikuti.

Seperti yang saya sebutkan sebelumnya, apa pun yang Anda lakukan antara $((...)) dianggap sebagai operasi aritmatika.

Semua konversi ini berfungsi untuk bilangan bulat. Ini tidak akan bekerja dengan floating point yaitu angka dengan titik desimal.

Coba campur string dan angka yang sebenarnya

Mencampur string dan integer masih lebih aman daripada mencampur coke dan mint. Itu memang menghasilkan hasil yang aneh.

[email protected]:~$ sum=$((3+hello))
[email protected]:~$ echo $sum
3

Ini hanya akan berfungsi ketika ada angka (sebagai string). Jika itu adalah string karakter murni, itu tidak akan diubah secara ajaib menjadi beberapa angka. Sebaliknya, itu diabaikan seperti yang Anda lihat pada contoh di atas.

Metode alternatif:gunakan expr

Anda juga dapat menggunakan expr alat untuk melakukan evaluasi, tetapi perhatikan bahwa ini bukan prosedur Bash "asli", karena Anda harus memiliki coreutils diinstal (secara default di Ubuntu) sebagai paket terpisah.

[email protected]:~$ expr $a + $b \* $c - $d
16

Saya harap tutorial singkat ini membantu Anda dalam mengevaluasi string bash sebagai angka. Jika Anda memiliki pertanyaan atau saran, jangan ragu untuk meninggalkan komentar di bawah.


Linux
  1. Cara menulis loop di Bash

  2. Bagaimana Bash Mengevaluasi Kode Berikut?

  3. Cara memeriksa apakah smtp berfungsi dari commandline (Linux)

  1. Bagaimana Cara Men-debug Skrip Bash?

  2. Bash - Cara mencetak string multi baris (dengan '\n') menggunakan printf

  3. Mengapa nama pengguna Linux tidak boleh dimulai dengan angka?

  1. Bagaimana Cara Mendeteksi Bash>=4.0?

  2. Bagaimana Membandingkan String di Bash Shell Scripting

  3. Cara Menggabungkan String di Bash