Kwestia:
Co jakiś czas muszę wykonywać prostą arytmetykę w środowisku wiersza poleceń. EG, mając następującą moc wyjściową:
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)
Jak w prosty sposób obliczyć w wierszu poleceń wielkość nieprzydzielonego miejsca między partycją 3 a 5?
Co już próbowałem:
pne
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
gdzie pogrubienie powyżej to wszystko, co muszę wpisać, aby zrobić proste 236-192
jak bc 1+1
echoFile 1+1 is unavailable.
expr
expr 236 - 192
gdzie muszę wpisywać spacje przed i za operatorem, jak expr 1+1
tylko echo 1+1
.
shell
calculator
Fabby
źródło
źródło
quit
siębc
; naciśnięciectrl-D
zrobi, jak w każdym programie interaktywnym.dc
jest (IMO) znacznie lepszy odbc
.Odpowiedzi:
Możesz znacznie zmniejszyć ilość gadatliwości związanej z używaniem
bc
:(zakładając, że twoja powłoka to obsługuje).
Jeśli wolisz to jako funkcję:
Zapisz
c
definicję w swoim ulubionym pliku startowym powłoki, jeśli chcesz, aby była zawsze dostępna.źródło
bc<RET>236-128<RET>quit<RET>
to 16 naciśnięć klawiszy.bc<<<"236-128"<RET>
to 15 naciśnięć klawiszy. Nie to, co nazwałbym „znacznie zmniejszoną ilością pisania” :-) Ponadtobc
można wyjść z niego^D
, więc pierwsza opcja została zredukowana do 13 naciśnięć klawiszy (licząc^D
jako dwa).c 1+1
właśnie tego potrzebowałem! :-) (odpowiedź zaktualizowana, aby była bardziej przejrzysta)bc -l
definicji funkcji, aby zwiększyć jej możliwości.Muszla
Najprostszym obliczono w CLI jest CLI (shell) sam (Jeśli
IFS
to ustawienie domyślne):Spacje można pominąć:
Ponieważ jest on częścią POSIX, prawie wszystkie powłoki mają go. I zawiera większość funkcji matematycznych języka C (oprócz tego, że zsh ma inny priorytet, ustaw C_PRECEDENCES, aby przywrócić mu zgodną wartość):
A niektóre muszle mają większość składni języka C matematyki (w tym przecinkiem):
Ale to tylko matematyka na liczbach całkowitych (i zwykle mniej niż 2 63 we współczesnych systemach operacyjnych) w niektórych powłokach:
Niektóre muszle mogą wykonywać matematykę pływającą:
Unikaj zsh (zcalc ma podobne problemy):
Radzę unikać
expr
, czasem potrzebuje dziwnych ucieczek:pne
Na następnym poziomie jest ( także POSIX )
bc
(kuzyn RPNdc
)dc
Był POSIX ale został usunięty w 2017 roku .Krótszy, jeśli twoja powłoka go obsługuje:
Lub nawet:
Oba są kalkulatorami o dowolnej precyzji z pewnymi wewnętrznymi funkcjami matematycznymi:
awk
Po tych naprawdę podstawowych narzędziach do kalkulacji musisz przejść do innych języków
funkcjonować
Możesz zdefiniować funkcję dowolnej z powyższych opcji:
I użyć:
źródło
Czytając komentarze na tych stronach , widzę program o nazwie UNIX / Linux,
calc
który robi dokładnie to, co chcesz. Jeśli na Debianie / Ubuntu / pochodnych:wtedy możesz:
a jeśli dodać alias
alias c='calc'
do swojego.bashrc
czy/etc/bash.bashrc
to po prostu staje się:w wierszu poleceń.
źródło
W
zsh
:źródło
units
Programu, podczas gdy nie ma być używany jako kalkulator, faktycznie działa całkiem dobrze jako jeden.Jeśli w wyrażeniu są spacje, to wyrażenie musi być chronione cytatem.
Obsługuje wykładnicze i głębokie zagnieżdżanie nawiasów
źródło
units -t -d 10 "236GB - 192GB" GB
wyjść44
,units -t -d 15 "236GB - 192GB" bytes
wyjść44000000000
, itpJak zauważono w komentarzu do wcześniejszej odpowiedzi, standardowa powłoka (ba) sh pozwala na ocenę wyrażeń arytmetycznych
$((...))
. Nie mogłem dokładnie sprawdzić, czy jest to część standardu POSIX, ale sprawdziłem, czy działa również na Cygwin i powłoce Mingw32.Aby zobaczyć wynik, naprawdę musiałbyś pisać
echo $((...))
, co czyni niektóre znaki bardziej niż (interaktywne użycie)bc
. Jednak aby użyć wyniku w skrypcie, najprawdopodobniej będzie on krótszy niżbc
rozwiązanie (którym może być np`echo ...|bc`
.).Jeśli chodzi o gadatliwość,
bc
polecenie pozwala na opcję,-q
która tłumi wyjście „normalnegobc
powitania GNU ” .Na koniec, uwaga na marginesie, zwróćmy uwagę, że
bc
nie jest to tylko kalkulator, ale pełnoprawny język programowania (w tym funkcje zdefiniowane przez użytkownika, pętle while i for itp.). Kolejny fakt, który sugeruje preferowanie wbudowanych możliwości arytmetycznych dla takich prostych obliczeń, zamiast zewnętrznego programu. To powiedziawszy, wyodrębnianie danych dla danych numerów partycji i radzenie sobie z sufiksami „M”, „G”, jak wydawało się wymagać pierwotnego pytania, może(g)awk
raczej wymagaćbc
.Źródła: https://www.gnu.org/software/bc/manual/html_mono/bc.html https://www.gnu.org/software/gawk/manual/html_node/Getting-Started.html
źródło
$((...))
nazywa się rozszerzeniem arytmetycznym i jest częścią POSIX: pubs.opengroup.org/onlinepubs/9699919799/utilities/… Dla mnie największą wadą tej funkcji powłoki POSIX jest to, że obsługuje tylko arytmetykę liczb całkowitych :(W Zsh robię:
W bash musiałbym wyraźnie wspomnieć o cat:
Gdybym chciał, aby wynik zawierał cyfry ułamkowe (działa w Zsh, a nie w bash), dodałbym punkt radix do jednego z operandów
źródło
echo $((236 - 128))
też działa ;-).zsh -c 'print $((12345678901234567890123 + 1))' zsh:1: number truncated after 22 digits: 12345678901234567890123 + 1 -1363962815083169259
.zsh -c 'print $((12345678901234567890123 + 1))'
izsh -c 'print $((123456789012345678901 + 1))'
. Obcina się przy różnych długościach i daje różne wyniki liczbowe.bash -c 'echo $((1<<63))'
i `` bash -c '' echo $ (((1 << 63) -1)) ''.Osobiście lubię libqalculate (wersja Qalculate z wiersza poleceń ).
Chociaż interfejs jest z pewnością prosty, (lib) qalculate to potężny, pełnoprawny kalkulator. na przykład
Wykonuje także przydatne czynności, takie jak uzupełnianie tabulatorów, otwieranie / zamykanie nawiasów w razie potrzeby i drukuje interpretację zapytania.
Aby wyjść, po prostu naciskam Ctrl+ d.
Aby uzyskać jeszcze szybszy dostęp, ustaw na coś podobnego
alias ca='qalc'
.źródło
Python otwarty w innej zakładce?
źródło
dc -e '236 192-p'
... oczywiście, jeśli nie jesteś zaznajomiony
dc
i potrzebujesz więcej niż odejmowania dwóch liczb, poświęcisz więcej czasu na zastanawianie się, jak używaćdc
(i może ogólnie RPN ), niż zaoszczędzisz dzięki bardziej znanym metodom.źródło
Jeśli masz zainstalowaną gradle, masz groovy ...
Jeśli groovy jest poprawnie załatany, powinieneś móc użyć:
Może to wydawać się nieco zbędne w przypadku wszystkich innych przykładów, ale:
Jeśli nie masz zainstalowanej Java, prawdopodobnie nie warto instalować Groovy & Javy - jest to tylko opcja, jeśli Groovy jest już dostępny.
źródło
Próbowałeś concalc ?
Zainstaluj za pomocą:
źródło
Zanim opublikowano inne genialne odpowiedzi, ostatecznie stworzyłem skrypt
/usr/local/bin/c
zawierający:więc: pisanie
c 1+1
daje2
! :-)Uwaga 1: Użyłem,
c
ponieważ to polecenie nie istnieje w żadnym systemie uniksowym, który mogłem znaleźć. Jeśli miałbyś alias do swojego kompilatora c, użyj czegoś innego, co jest krótkie i nie używasz.Uwaga 2: Źródło
źródło
echo "$*" | bc -l
jako szewu, którego używałeś/bin/sh
i nie wiem, czy masz dostępne ksh / bash / zsh. (2) Pamiętaj, że możesz zmienić skalę, aby obliczyć, wykonując na przykład skalę `c '= 60; 777/333'. Mam nadzieję, że to pomoże @FabbyJeśli jest zainstalowany Python, możesz wykonywać wiele operacji matematycznych za pomocą wiersza poleceń. Próbowałem podać poniżej przykład.
Użyłem,
python3
że możesz użyćpython
. Różnica pomiędzypython
ipython3
występuje, gdy podzielone (frakcyjną) działanie występuje, w celu uniknięcia kwestii patrz poniżej pytona vs python3 .Dodawanie, odejmowanie, mnożenie i dzielenie:
Moduł - pozostałość podziału:
Podział pięter:
Wykładnik - x do potęgi y (x ^ y):
Pierwiastek kwadratowy (np .: √4 = 2):
Logarytm naturalny x = log (x):
Logarytm dziesiętny podstawy x = log10 (x):
Silnia (np .: 3! = 3.2.1 = 6):
Trigonometry-
sin(x)
,cos(x)
,tan(x)
:Aby zobaczyć więcej funkcji związanych z matematyką, sprawdź tutaj .
-Dla podziału: (użyj pływaka):
-zamiast
Otóż to. Miłego kodowania!
źródło
Albo
bc
alboqalc
.Aby automatycznie mieć
bc
zawsze zaokrąglanie do dwóch cyfr: (uruchamianie go przy użyciu-l
jest niewygodne na co dzień)Edytuj swój
~/.bashrc
:Otwórz nową powłokę i biegnij
bc
tam.źródło
Tworzenie jednowarstwowego:
Teraz możesz użyć prostej matematyki liczb całkowitych:
źródło
${1}
Wykorzystanie parametr jest unikalny dla wszystkich odpowiedzi.${1}
;-)