Isu:
Sesekali saya perlu melakukan aritmatika sederhana di lingkungan baris perintah. EG diberikan output berikut:
Disk /dev/sdb: 256GB
Sector size (logical/physical): 512B/512B
Partition Table: gpt
Disk Flags:
Number Start End Size File system Name Flags
1 1049kB 106MB 105MB fat32 hidden, diag
2 106MB 64.1GB 64.0GB ext4
3 64.1GB 192GB 128GB ext4
5 236GB 256GB 20.0GB linux-swap(v1)
Apa cara sederhana untuk menghitung pada baris perintah ukuran ruang yang tidak dialokasikan antara partisi 3 dan 5?
Apa yang sudah saya coba:
bc
bc
bc 1.06.95
Copyright 1991-1994, 1997, 1998, 2000, 2004, 2006 Free Software Foundation, Inc.
This is free software with ABSOLUTELY NO WARRANTY.
For details type `warranty'.
236-192
44
quit
di mana huruf tebal di atas adalah semua hal yang perlu saya ketik untuk melakukan yang sederhana 236-192
seperti bc 1+1
gemaFile 1+1 is unavailable.
expr
expr 236 - 192
di mana saya perlu mengetik spasi sebelum dan sesudah operator sebagai expr 1+1
gema saja 1+1
.
shell
calculator
Fabby
sumber
sumber
quit
ke dalambc
; menekanctrl-D
akan dilakukan, seperti halnya dalam program interaktif apa pun.dc
adalah (IMO) jauh lebih unggul daripadabc
.Jawaban:
Anda dapat sangat mengurangi jumlah verbosity yang terlibat dalam menggunakan
bc
:(dengan asumsi shell Anda mendukung itu).
Jika Anda lebih suka memiliki itu sebagai fungsi:
Simpan
c
definisi dalam file startup shell favorit Anda jika Anda ingin membuatnya selalu tersedia.sumber
bc<RET>236-128<RET>quit<RET>
adalah 16 penekanan tombol.bc<<<"236-128"<RET>
adalah 15 penekanan tombol. Bukan apa yang saya sebut "jumlah pengetikan yang sangat berkurang" :-) Selain itu,bc
dapat keluar dengan^D
, jadi opsi pertama dikurangi menjadi 13 penekanan tombol (dihitung^D
sebagai dua).c 1+1
itulah yang saya butuhkan! :-) (jawaban diperbarui untuk membuatnya lebih jelas)bc -l
definisi fungsi untuk membuatnya lebih mampu.Kulit
The sederhana calc di CLI adalah CLI (shell) itu sendiri (Jika
IFS
adalah default):Spasi dapat dihilangkan:
Karena ini adalah bagian dari POSIX, hampir semua shell memilikinya. Dan itu termasuk sebagian besar fungsi matematika bahasa C (kecuali bahwa zsh memiliki prioritas yang berbeda, tetapkan C_PRECEDENCES untuk mengembalikannya ke nilai yang kompatibel):
Dan beberapa shell memiliki sebagian besar sintaks matematika bahasa C (termasuk koma):
Tapi itu hanya bilangan bulat matematika (dan biasanya kurang dari 63 pada OS saat ini) di beberapa shell:
Beberapa kerang bisa melakukan matematika mengambang:
Hindari zsh (zcalc memiliki masalah serupa):
Saya sarankan Anda untuk menghindarinya
expr
, terkadang perlu pelarian yang aneh:bc
Pada level selanjutnya adalah ( juga POSIX )
bc
(sepupu RPNdc
)The
dc
adalah POSIX tetapi mendapat dihapus pada tahun 2017 .Lebih pendek jika shell Anda mendukungnya:
Atau bahkan:
Keduanya adalah kalkulator presisi acak dengan beberapa fungsi matematika internal:
awk
Setelah alat calc yang benar-benar dasar , Anda perlu naik ke bahasa lain
fungsi
Anda dapat mendefinisikan fungsi dari salah satu opsi di atas:
Dan gunakan:
sumber
Membaca komentar halaman ini , saya melihat program UNIX / Linux disebut
calc
yang tidak persis apa yang Anda inginkan. Jika pada Debian / Ubuntu / turunannya:maka kamu bisa:
dan jika Anda menambahkan alias
alias c='calc'
ke Anda.bashrc
atau/etc/bash.bashrc
hanya menjadi:di baris perintah.
sumber
Dalam
zsh
:sumber
The
units
Program, sementara tidak dimaksudkan untuk digunakan sebagai kalkulator, benar-benar bekerja cukup baik sebagai salah satu.Jika ada spasi dalam ekspresi, maka ekspresi harus dilindungi kutipan.
Ini mendukung eksponensial dan bersarang kurung
sumber
units -t -d 10 "236GB - 192GB" GB
keluaran44
,units -t -d 15 "236GB - 192GB" bytes
keluaran44000000000
, dll.Seperti yang dikomentari dalam komentar pada balasan sebelumnya, shell standar (ba) sh memungkinkan untuk mengevaluasi ekspresi aritmatika di dalamnya
$((...))
. Saya tidak dapat memeriksa ulang apakah ini merupakan bagian dari standar POSIX, tetapi saya memang memeriksa apakah itu juga berfungsi pada Cygwin dan shell Mingw32.Untuk melihat hasilnya, Anda memang harus mengetik
echo $((...))
, yang membuat beberapa karakter lebih dari (penggunaan interaktif)bc
. Namun, untuk menggunakan hasil dalam skrip, ini kemungkinan besar akan lebih pendek daripadabc
solusinya (yang bisa jadi, misalnya,`echo ...|bc`
).Mengenai verbositas,
bc
perintah memungkinkan opsi-q
yang menekan output dari "bc
selamat datang GNU normal " .Sebagai komentar akhir, sedikit batas, mari kita perhatikan bahwa
bc
ini bukan hanya kalkulator tetapi juga bahasa pemrograman lengkap (termasuk fungsi yang ditentukan pengguna, sementara & untuk loop, dll.). Fakta lain yang menyarankan untuk lebih memilih kemampuan aritmatika built-in untuk perhitungan sederhana seperti itu, daripada program eksternal. Yang mengatakan, mengekstraksi data untuk nomor partisi yang diberikan dan berurusan dengan sufiks "M", "G", seperti yang ditanyakan oleh pertanyaan awal, mungkin lebih tepat disebut(g)awk
bukanbc
.Sumber: https://www.gnu.org/software/bc/manual/html_mono/bc.html https://www.gnu.org/software/gawk/manual/html_node/Getting-Started.html
sumber
$((...))
disebut Ekspansi Aritmatika dan merupakan bagian dari POSIX: pubs.opengroup.org/onlinepubs/9699919799/utilities/... Bagi saya kelemahan terbesar dari fitur shell POSIX ini adalah hanya mendukung aritmatika integer :(Apa yang saya lakukan di zsh adalah:
Dalam bash, saya harus menyebutkan secara eksplisit cat:
Jika saya ingin hasilnya menyertakan digit fraksional (bekerja di zsh, bukan di bash), saya akan menambahkan titik radix ke salah satu operan
sumber
echo $((236 - 128))
bekerja juga ;-).zsh -c 'print $((12345678901234567890123 + 1))' zsh:1: number truncated after 22 digits: 12345678901234567890123 + 1 -1363962815083169259
.zsh -c 'print $((12345678901234567890123 + 1))'
danzsh -c 'print $((123456789012345678901 + 1))'
. Ini memotong pada panjang yang berbeda dan menghasilkan hasil numerik yang berbeda.bash -c 'echo $((1<<63))'
dan `` bash -c 'echo $ (((1 << 63) -1))' `.Secara pribadi, saya suka libqalculate (versi command-line dari Qalculate ).
Meskipun antarmuka jelas sederhana, (lib) qalculate adalah kalkulator yang kuat dan lengkap. misalnya
Ia juga melakukan hal-hal berguna seperti penyelesaian tab, buka / tutup tanda kurung bila perlu, dan cetak interpretasinya atas kueri.
Untuk keluar, saya cukup tekan Ctrl+ d.
Untuk akses yang lebih cepat, atur ke sesuatu seperti
alias ca='qalc'
.sumber
Python terbuka di tab lain?
sumber
dc -e '236 192-p'
... tentu saja, jika Anda tidak terbiasa
dc
dan Anda membutuhkan lebih dari mengurangi dua angka, Anda akan menghabiskan lebih banyak waktu mencari cara menggunakandc
(dan mungkin RPN secara umum) daripada Anda akan menghemat dengan metode yang lebih akrab.sumber
Jika Anda telah menginstal gradle maka Anda ...
Jika groovy dilacak dengan benar, Anda harus dapat menggunakan:
Ini mungkin tampak agak berlebihan dengan semua contoh lain, tetapi:
Jika Anda tidak menginstal java, mungkin tidak layak menginstal groovy & java - itu hanya opsi jika groovy sudah tersedia.
sumber
Sudahkah Anda mencoba concalc ?
Instal dengan:
sumber
Sebelum salah satu jawaban brilian lainnya diposting, saya akhirnya membuat skrip yang
/usr/local/bin/c
berisi:jadi: ketikkan
c 1+1
hasil2
! :-)Catatan 1: Saya menggunakan
c
karena perintah itu tidak ada pada sistem Unix yang saya temukan. Jika Anda ingin mengatakan itu ke kompiler c Anda, gunakan hal lain yang pendek dan tidak Anda gunakan.Catatan 2: Sumber
sumber
echo "$*" | bc -l
shebang yang Anda gunakan dulu/bin/sh
dan saya tidak tahu apakah Anda memiliki ksh / bash / zsh. (2) Perhatikan bahwa Anda dapat mengubah skala untuk menghitung adalah Anda menjalankan `c 'skala = 60; 777/333', misalnya. Semoga ini bisa membantu @FabbyJika python diinstal, Anda dapat melakukan banyak operasi matematika melalui baris perintah. Saya mencoba memberikan beberapa contoh di bawah ini.
Saya telah menggunakan
python3
yang dapat Anda gunakanpython
. Perbedaan antarapython
danpython3
terjadi ketika operasi dibagi (fraksional) terjadi, untuk menghindari masalah lihat di bawah python vs python3 .Tambahkan, Kurangi, Gandakan & Bagi:
Modulus - tetap dari divisi:
Divisi lantai:
Eksponen - x pangkat y (x ^ y):
Root kuadrat (mis: √4 = 2):
Logaritma natural x = log (x):
Logaritma basis-10 dari x = log10 (x):
Faktorial (mis: 3! = 3.2.1 = 6):
Trigonometry-
sin(x)
,cos(x)
,tan(x)
:Untuk lebih banyak fungsi terkait matematika, periksa di sini .
-Untuk membagi: (gunakan float):
-dari pada
Itu dia. Selamat coding!
sumber
Entah
bc
atauqalc
.Untuk secara otomatis
bc
selalu membulatkan ke dua digit: (menjalankannya dengan-l
berat untuk hal-hal sehari-hari)Edit Anda
~/.bashrc
:Buka shell baru dan jalankan di
bc
sana.sumber
Membuat satu garis:
Sekarang Anda dapat menggunakan matematika integer sederhana:
sumber
${1}
parameter unik untuk semua jawaban.${1}
;-)