Problème:
De temps en temps, je dois faire de l'arithmétique simple dans un environnement en ligne de commande. EG étant donné la sortie suivante:
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)
Quel est un moyen simple de calculer sur la ligne de commande la taille de l'espace non alloué entre la partition 3 et 5?
Ce que j'ai déjà essayé:
avant JC
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
où le gras ci - dessus est tous les trucs que je dois taper faire simple 236-192
comme bc 1+1
échosFile 1+1 is unavailable.
expr
expr 236 - 192
où je dois taper des espaces avant et après l'opérateur comme de expr 1+1
simples échos 1+1
.
shell
calculator
Fabby
la source
la source
quit
dansbc
; appuyant surctrl-D
fera l'affaire, comme dans tout programme interactif.dc
est (OMI) bien supérieur àbc
.Réponses:
Vous pouvez réduire considérablement le niveau de verbosité impliqué dans l'utilisation
bc
:(en supposant que votre shell le supporte).
Si vous préférez avoir cela en fonction:
Enregistrez la
c
définition dans votre fichier de démarrage shell préféré si vous souhaitez la rendre toujours disponible.la source
bc<RET>236-128<RET>quit<RET>
est de 16 touches.bc<<<"236-128"<RET>
est de 15 touches. Ce n'est pas ce que j'appellerais "une quantité de frappe considérablement réduite" :-) De plus,bc
peut être quitté avec^D
, donc la première option est réduite à 13 frappes (comptant^D
pour deux).c 1+1
exactement ce dont j'avais besoin! :-) (réponse mise à jour pour que ce soit plus clair)bc -l
dans la définition de la fonction pour la rendre plus performante.coquille
Le calcul le plus simple en CLI est le CLI (shell) lui-même (If
IFS
est par défaut):Les espaces peuvent être omis:
Comme il fait partie de POSIX, presque tous les shells l'ont. Et il inclut la plupart des fonctionnalités mathématiques du langage C (sauf que zsh a une priorité différente, définissez C_PRECEDENCES pour le restaurer à une valeur compatible):
Et certains shells ont la plupart de la syntaxe mathématique du langage C (y compris la virgule):
Mais ce ne sont que des mathématiques entières (et généralement moins de 2 63 dans les systèmes d'exploitation actuels) dans certains shells:
Certains obus pourraient faire des calculs flottants:
Évitez zsh (zcalc a des problèmes similaires):
Je vous recommande d'éviter
expr
, il faut parfois des évasions bizarres:avant JC
Au niveau suivant est ( également POSIX )
bc
(cousin de RPNdc
)Le
dc
était Posix mais ils nous ont enlevé en 2017 .Plus court si votre shell le prend en charge:
Ou même:
Les deux sont des calculateurs de précision arbitraires avec quelques fonctions mathématiques internes:
awk
Après ces outils de calcul vraiment basiques , vous devez passer à d'autres langues
une fonction
Vous pouvez définir une fonction de l'une des options ci-dessus:
Et utilise:
la source
En lisant les commentaires de cette page , je vois un programme UNIX / Linux appelé
calc
qui fait exactement ce que vous voulez. Si sur Debian / Ubuntu / dérivés:Ensuite vous pouvez:
et si vous ajoutez un alias
alias c='calc'
à votre.bashrc
ou/etc/bash.bashrc
alors il devient juste:sur la ligne de commande.
la source
Dans
zsh
:la source
Le
units
programme, bien qu'il ne soit pas destiné à être utilisé comme une calculatrice, fonctionne plutôt bien comme tel.S'il y a des espaces dans l'expression, alors l'expression doit être protégée par des guillemets.
Il prend en charge les exponentielles et l'imbrication profonde des supports
la source
units -t -d 10 "236GB - 192GB" GB
sorties44
,units -t -d 15 "236GB - 192GB" bytes
sorties44000000000
, etc.Comme indiqué dans un commentaire à une réponse précédente, le shell standard (ba) sh permet d'évaluer les expressions arithmétiques à l'intérieur
$((...))
. Je n'ai pas pu vérifier si cela fait partie de la norme POSIX, mais j'ai vérifié que cela fonctionne également sur Cygwin et le shell Mingw32.Pour voir le résultat, il faudrait en effet taper
echo $((...))
, ce qui rend certains caractères plus que (utilisation interactive de)bc
. Cependant, pour utiliser le résultat dans un script, ce sera probablement plus court que labc
solution (ce qui pourrait être, par exemple`echo ...|bc`
).Concernant la verbosité, la
bc
commande permet l'option-q
qui supprime la sortie de "l'bc
accueil GNU normal " .En guise de remarque finale, légèrement limite, notons qu'il
bc
ne s'agit pas seulement d'une calculatrice mais plutôt d'un langage de programmation à part entière (y compris les fonctions définies par l'utilisateur, les boucles while et for, etc., etc.). Un autre fait qui suggère de préférer les capacités arithmétiques intégrées pour de tels calculs simples, plutôt qu'un programme externe. Cela dit, l'extraction des données pour le (s) numéro (s) de partition donné (s) et le traitement des suffixes "M", "G", comme la question d'origine semblait demander, pourraient appeler(g)awk
plutôt quebc
.Sources: https://www.gnu.org/software/bc/manual/html_mono/bc.html https://www.gnu.org/software/gawk/manual/html_node/Getting-Started.html
la source
$((...))
s'appelle Arithmetic Expansion et fait partie de POSIX: pubs.opengroup.org/onlinepubs/9699919799/utilities/… Pour moi, le plus gros inconvénient de cette fonctionnalité d'un shell POSIX est qu'il ne prend en charge que l'arithmétique entière :(Ce que je fais dans zsh c'est:
En bash, je devrais mentionner explicitement cat:
Si je voulais que le résultat comprenne des chiffres fractionnaires (fonctionne en zsh, pas en bash), j'ajouterais un point radix à l'un des opérandes
la source
echo $((236 - 128))
fonctionne aussi ;-).zsh -c 'print $((12345678901234567890123 + 1))' zsh:1: number truncated after 22 digits: 12345678901234567890123 + 1 -1363962815083169259
.zsh -c 'print $((12345678901234567890123 + 1))'
etzsh -c 'print $((123456789012345678901 + 1))'
. Il est tronqué à différentes longueurs et produit des résultats numériques différents.bash -c 'echo $((1<<63))'
et `` bash -c 'echo $ (((1 << 63) -1))' '.Personnellement, j'aime libqalculate (la version en ligne de commande de Qalculate ).
Bien que l'interface soit certainement simple, (lib) qalculate est une calculatrice puissante et à part entière. par exemple
Il fait également des choses utiles comme la complétion de tabulation, ouvre / ferme les parenthèses si nécessaire et imprime son interprétation de la requête.
Pour sortir, j'appuie simplement sur Ctrl + d.
Pour un accès encore plus rapide, définissez-le sur quelque chose comme
alias ca='qalc'
.la source
Python ouvert dans un autre onglet?
la source
dc -e '236 192-p'
... bien sûr, si vous n'êtes pas familier
dc
et que vous avez besoin de plus que de soustraire deux nombres, vous passerez plus de temps à rechercher comment utiliserdc
(et peut-être RPN en général) que vous n'en économiserez avec des méthodes plus familières.la source
Si vous avez installé gradle, vous avez groovy ...
Si groovy est correctement acheminé, vous devriez pouvoir utiliser:
Cela peut sembler un peu redondant avec tous les autres exemples, mais:
Si vous n'avez pas installé java, cela ne vaut probablement pas la peine d'installer groovy & java - c'est juste une option si groovy est déjà disponible.
la source
Avez-vous essayé concalc ?
Installer avec:
la source
Avant que l'une des autres réponses brillantes ne soit publiée, j'ai fini par créer le script
/usr/local/bin/c
contenant:donc: en tapant les
c 1+1
rendements2
! :-)Remarque 1: J'ai utilisé
c
car cette commande n'existe sur aucun système Unix que j'ai pu trouver. Si vous auriez donné un alias à votre compilateur c, utilisez tout ce qui est court et vous ne l'utilisez pas.Remarque 2: source
la source
echo "$*" | bc -l
comme le shebang que vous avez utilisé/bin/sh
et je ne sais pas si vous avez ksh / bash / zsh disponible. (2) Notez que vous pouvez modifier l'échelle à calculer si vous exécutez l'échelle `c '= 60; 777/333', par exemple. J'espère que ça aide @FabbySi python est installé, vous pouvez effectuer de nombreuses opérations mathématiques via la ligne de commande. J'ai essayé de fournir un exemple ci-dessous.
J'ai utilisé,
python3
vous pouvez utiliserpython
. La différence entrepython
etpython3
se produit quand une opération divisée (fractionnelle) se produit, pour éviter le problème, voir ci-dessous python vs python3 .Ajouter, soustraire, multiplier et diviser:
Module - reste de la division:
Division au sol:
Exposant - x à la puissance de y (x ^ y):
Racine carrée (ex: √4 = 2):
Le logarithme naturel de x = log (x):
Le logarithme en base 10 de x = log10 (x):
Factorielle (ex: 3! = 3.2.1 = 6):
Trigonometry-
sin(x)
,cos(x)
,tan(x)
:Pour plus de fonctions mathématiques, vérifiez ici .
-Pour diviser: (utiliser float):
-au lieu de
C'est ça. Bon codage!
la source
Soit
bc
ouqalc
.Pour avoir automatiquement un
bc
arrondi toujours à deux chiffres: (l'exécuter avec-l
est difficile à gérer pour les choses quotidiennes)Modifiez votre
~/.bashrc
:Ouvrez un nouveau shell et exécutez-
bc
y.la source
Création d'une doublure:
Vous pouvez maintenant utiliser des mathématiques entières simples:
la source
${1}
utilisation des paramètres est unique à toutes les réponses.${1}
;-)