Выпуск:
Время от времени мне нужно делать простую арифметику в среде командной строки. ЭГ дал следующий вывод:
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)
Какой простой способ вычислить в командной строке размер нераспределенного пространства между разделами 3 и 5?
Что я уже пробовал:
До нашей эры
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
где жирный шрифт выше все вещи мне нужно ввести , чтобы сделать простой , 236-192
как bc 1+1
эхо - сигналыFile 1+1 is unavailable.
выраж
expr 236 - 192
где мне нужно вводить пробелы до и после оператора, как expr 1+1
просто эхо 1+1
.
shell
calculator
Fabby
источник
источник
quit
вbc
; Нажатиеctrl-D
сделает, как в любой интерактивной программе.dc
(ИМО) намного превосходитbc
.Ответы:
Вы можете значительно уменьшить объем многословия при использовании
bc
:(если ваша оболочка это поддерживает).
Если бы вы предпочли это как функцию:
Сохраните
c
определение в вашем любимом файле запуска оболочки, если вы хотите, чтобы оно всегда было доступно.источник
bc<RET>236-128<RET>quit<RET>
16 нажатий клавиш.bc<<<"236-128"<RET>
это 15 нажатий клавиш. Не то, что я бы назвал «значительно уменьшенное количество печатания» :-) Кроме того,bc
можно выйти с помощью^D
, поэтому первый вариант уменьшен до 13 нажатий клавиш (считая^D
два).c 1+1
именно то, что мне нужно! :-) (ответ обновлен, чтобы прояснитьbc -l
в определении функции, чтобы сделать его более способным.Ракушка
Простейший известково в CLI является CLI (оболочка) сама по себе (если
IFS
это по умолчанию):Пробелы могут быть опущены:
Поскольку он является частью POSIX, почти все оболочки имеют его. И он включает в себя большинство математических функций языка Си (за исключением того, что zsh имеет другой приоритет, установите C_PRECEDENCES, чтобы восстановить его в совместимое значение):
И некоторые оболочки имеют большую часть математического синтаксиса языка Си (включая запятую):
Но это только целочисленная математика (и обычно менее 2 63 в современных операционных системах) в некоторых оболочках:
Некоторые снаряды могут делать плавающую математику:
Избегайте zsh (у zcalc есть похожие проблемы):
Я рекомендую вам избегать
expr
, иногда нужны странные побеги:До нашей эры
На следующем уровне ( также POSIX )
bc
(двоюродный брат RPNdc
)dc
Был POSIX , но был удален в 2017 году .Короче, если ваша оболочка это поддерживает:
Или даже:
Оба калькулятора произвольной точности с некоторыми внутренними математическими функциями:
AWK
После этих действительно базовых инструментов калькуляции вам нужно перейти на другие языки
функция
Вы можете определить функцию любой из вышеперечисленных опций:
И использовать:
источник
Читая комментарии на этой странице , я вижу UNIX / Linux-программу,
calc
которая делает именно то, что вы хотите. Если на Debian / Ubuntu / производные:тогда ты можешь:
и если вы добавите псевдоним
alias c='calc'
к вашему.bashrc
или/etc/bash.bashrc
тогда он просто становится:в командной строке.
источник
В
zsh
:источник
units
Программы, в то время как не предназначены для использования в качестве калькулятора, на самом деле работает довольно хорошо , как один.Если в выражении есть пробелы, то выражение должно быть защищено кавычками.
Поддерживает экспоненты и глубокое вложение скобок
источник
units -t -d 10 "236GB - 192GB" GB
выходы44
,units -t -d 15 "236GB - 192GB" bytes
выходы44000000000
и т. Д.Как отмечалось в комментарии к предыдущему ответу, стандартная оболочка (ba) sh позволяет оценивать арифметические выражения внутри
$((...))
. Я не мог дважды проверить, является ли это частью стандарта POSIX, но я проверял, что он также работает на Cygwin и оболочке Mingw32.Чтобы увидеть результат, вам действительно нужно набрать
echo $((...))
, что делает некоторые символы более (интерактивное использование)bc
. Однако, чтобы использовать результат в сценарии, это, скорее всего, будет короче, чемbc
решение (которое может быть, например,`echo ...|bc`
).Что касается многословия,
bc
команда разрешает опцию,-q
которая подавляет вывод «обычногоbc
приветствия GNU » .В качестве последнего, слегка ограничивающего замечания, отметим, что
bc
это не просто калькулятор, а полноценный язык программирования (включая пользовательские функции, циклы & для и т. Д. И т. Д.). Еще один факт, который предлагает предпочесть встроенные арифметические возможности для таких простых вычислений, а не внешней программе. Тем не менее, извлечение данных для заданных номеров разделов и работа с суффиксами «M», «G», как казалось, требовалось в первоначальном вопросе, может потребовать,(g)awk
а неbc
.Источники: https://www.gnu.org/software/bc/manual/html_mono/bc.html https://www.gnu.org/software/gawk/manual/html_node/Getting-Started.html
источник
$((...))
называется Arithmetic Expansion и является частью POSIX: pubs.opengroup.org/onlinepubs/9699919799/utilities/… Для меня самым большим недостатком этой функции оболочки POSIX является то, что она поддерживает только целочисленную арифметику :(Что я делаю в Zsh:
В bash я бы явно упомянул cat:
Если бы я хотел, чтобы результат включал дробные цифры (работает в zsh, а не в bash), я бы добавил точку радиуса к одному из операндов
источник
echo $((236 - 128))
тоже работает ;-).zsh -c 'print $((12345678901234567890123 + 1))' zsh:1: number truncated after 22 digits: 12345678901234567890123 + 1 -1363962815083169259
.zsh -c 'print $((12345678901234567890123 + 1))'
иzsh -c 'print $((123456789012345678901 + 1))'
. Он усекается на разную длину и дает разные числовые результаты.bash -c 'echo $((1<<63))'
`` bash -c 'echo $ (((1 << 63) -1))' `.Лично мне нравится libqalculate (версия Qalculate для командной строки ).
Хотя интерфейс, конечно, прост, (lib) qalculate - мощный, полноценный калькулятор. например
Он также делает полезные вещи, такие как завершение табуляции, открывать / закрывать скобки, когда это необходимо, и печатает свою интерпретацию запроса.
Чтобы выйти, я просто нажимаю Ctrl+ d.
Для еще более быстрого доступа установите что-то вроде
alias ca='qalc'
.источник
Python открыть в другой вкладке?
источник
dc -e '236 192-p'
... конечно, если вы не знакомы
dc
и вам нужно больше, чем вычитать два числа, вы потратите больше времени на поиск способов использованияdc
(и, возможно, RPN в целом), чем сэкономите с помощью более знакомых методов.источник
Если у вас установлен Gradle, то у вас есть отличный ...
Если groovy исправлен правильно, вы можете использовать:
Это может показаться немного избыточным со всеми другими примерами, но:
Если у вас не установлена java, то, вероятно, не стоит устанавливать groovy & java - это просто вариант, если groovy уже доступен.
источник
Вы пробовали Concalc ?
Установить с помощью:
источник
До того, как были опубликованы любые другие блестящие ответы, я создал сценарий,
/usr/local/bin/c
содержащий:итак: печатать
c 1+1
урожайность2
! :-)Примечание 1: я использовал,
c
потому что эта команда не существует ни в одной системе Unix, которую я мог найти. Если вы добавили это в свой компилятор c, используйте что-нибудь короткое и не используйте его.Примечание 2: Источник
источник
echo "$*" | bc -l
в качестве шебанга, который вы использовали,/bin/sh
и я не знаю, есть ли у вас ksh / bash / zsh. (2) Обратите внимание, что вы можете изменить масштаб для вычисления, например, если вы выполните `c 'scale = 60; 777/333'. Надеюсь, это поможет @FabbyЕсли Python установлен, вы можете сделать много математических операций через командную строку. Я попытался привести пример ниже.
Я использовал,
python3
вы можете использоватьpython
. Разница междуpython
иpython3
возникает при делении (дробной) операции, чтобы избежать этой проблемы, см. Ниже python против python3 .Добавить, вычесть, умножить и разделить:
Модуль - остаток от деления:
Этажное деление:
Экспонента - х в степени у (х ^ у):
Квадратный корень (например: √4 = 2):
Натуральный логарифм x = log (x):
Основание-10 логарифм х = log10 (х):
Факториал (например: 3! = 3.2.1 = 6):
Trigonometry-
sin(x)
,cos(x)
,tan(x)
:Подробнее о математических функциях смотрите здесь .
-Для разделения: (используйте float):
-вместо того
Вот и все. Удачного кодирования!
источник
Либо
bc
илиqalc
.Для автоматического
bc
округления до двух цифр: (запускать его с-l
громоздкими текстами для повседневных задач)Отредактируйте ваш
~/.bashrc
:Откройте новую оболочку и запустите
bc
там.источник
Создание однострочника:
Теперь вы можете использовать простую целочисленную математику:
источник
${1}
параметра является уникальным для всех ответов.${1}
;-)