Comando bc en Linux con ejemplos

El comando bc se usa para la calculadora de línea de comandos. Es similar a la calculadora básica mediante la cual podemos hacer cálculos matemáticos básicos. 
Las operaciones aritméticas son las más básicas en cualquier tipo de lenguaje de programación. El sistema operativo Linux o Unix proporciona el comando bc y el comando expr para realizar cálculos aritméticos. Puede usar estos comandos en bash o shell script también para evaluar expresiones aritméticas. 

Sintaxis: 

bc [ -hlwsqv ] [long-options] [ file ... ] 

Opciones:  
-h , {- -help } : imprime el uso y sale 
-i , {- -interactive } : fuerza el modo interactivo 
-l , {- -mathlib } : define la biblioteca matemática estándar 
-w , {- -warn } : Dar advertencias para extensiones a POSIX bc 
-s , {- -standard } : Procesar exactamente el lenguaje POSIX bc 
-q , {- -quiet } : No imprimir el GNU normal bc welcome 
-v , {- -version } : Imprimir el número de versión y los derechos de autor y salir 

El comando bc admite las siguientes funciones: 

  • Operadores aritméticos
  • Operadores de incremento o decremento
  • Operadores de Asignación
  • Operadores de comparación o relacionales
  • Operadores lógicos o booleanos
  • Funciones matemáticas
  • Declaraciones condicionales
  • Declaraciones iterativas 

1. Operadores Aritméticos 

Ejemplos:  

Input : $echo "12+5" | bc
Output : 17

Input : $echo "10^2" | bc
Output : 100

¿Cómo almacenar el resultado de la operación completa en variable? 

Ejemplo:  

Input:
$x=`echo "12+5" | bc`
$echo $x
Output:17

Explicación: almacena el resultado de la primera línea de entrada en la variable x y luego muestra la variable x como $x

2. Operadores de Asignación 
La lista de operadores de asignación soportados son:  

  • var = value : Asignar el valor a la variable
  • var += valor : similar a var = var + valor
  • var -= valor : similar a var = var – valor
  • var *= valor : similar a var = var * valor
  • var /= valor : similar a var = var / valor
  • var ^= valor : similar a var = var ^ valor
  • var %= valor : similar a var = var % valor

Ejemplos:  

Input: $echo "var=10;var" | bc
Output: 10

Explicación: Asigne 10 a la variable e imprima el valor en la terminal.  

Input: $echo "var=10;var^=2;var" | bc
Output: 100

Explicación: Eleva al cuadrado el valor de la variable e imprime el valor en el terminal. 

¿Cómo almacenar el resultado de la operación completa en variable? 

Ejemplo:  

Input:
$x=`echo "var=500;var%=7;var" | bc`
$echo $x 
Output:3

Explicación: almacena el resultado de 500 módulo 7, es decir, el resto de 500/7 en la variable x y luego muestra la variable x como $x

3. Operadores de incremento 
Hay 2 tipos de operadores de incremento:  

  • ++var : Operador de incremento previo, la variable se incrementa primero y luego se almacena el resultado de la variable.
  • var++ : operador de incremento posterior, el resultado de la variable se usa primero y luego se incrementa la variable.

Ejemplos:  

Input: $echo "var=10;++var" | bc
Output: 11

Explicación: Primero se aumenta la variable y luego se almacena el resultado de la variable.  

Input: $echo "var=10;var++" | bc
Output: 10

Explicación: Primero se usa el resultado de la variable y luego se incrementa la variable. 

4. Operadores de decremento 
Hay 2 tipos de operadores de decremento: 

  • – – var : Antes del operador de decremento, la variable se reduce primero y luego se almacena el resultado de la variable.
  • var – – : operador de decremento posterior, el resultado de la variable se usa primero y luego se decrementa la variable.

Ejemplos:  

Input: $echo "var=10;--var" | bc
Output: 9

Explicación: Primero se disminuye la variable y luego se almacena el resultado de la variable.  

Input: $echo "var=10;var--" | bc
Output: 10

Explicación: Primero se usa el resultado de la variable y luego se decrementa la variable. 

5. Operadores de comparación o relacionales Los operadores 
relacionales se utilizan para comparar 2 números. Si la comparación es verdadera, entonces el resultado es 1 . De lo contrario (falso), devuelve 0 . Estos operadores se usan generalmente en declaraciones condicionales como if

La lista de operadores relacionales admitidos en el comando bc se muestra a continuación: 

  • expr1<expr2 : El resultado es 1 si expr1 es estrictamente menor que expr2.
  • expr1<=expr2 : El resultado es 1 si expr1 es menor o igual que expr2.
  • expr1>expr2 : El resultado es 1 si expr1 es estrictamente mayor que expr2.
  • expr1>=expr2 : El resultado es 1 si expr1 es mayor o igual que expr2.
  • expr1==expr2 : El resultado es 1 si expr1 es igual a expr2.
  • expr1!=expr2 : El resultado es 1 si expr1 no es igual a expr2.

Ejemplos:  

Input: $echo "10>5" | bc
Output: 1

Input: $echo "1==2" | bc
Output: 0

6. Operadores lógicos o booleanos 
Los operadores lógicos se utilizan principalmente en declaraciones condicionales. El resultado de los operadores lógicos es 1 (VERDADERO) o 0 (FALSO).  

  • expr1 && expr2 : El resultado es 1 si ambas expresiones son distintas de cero.
  • expr1 || expr2 : el resultado es 1 si cualquiera de las expresiones es distinta de cero.
  • ! expr : el resultado es 1 si expr es 0.

Ejemplos:  

Input: $echo "10 && 5" | bc
Output: 1

Input: $echo "0 || 0" | bc
Output: 0

Input: $echo "! 0" | bc
Output: 1

7. Funciones 
matemáticas Las funciones matemáticas integradas admitidas son:  

  • s (x) : El seno de x, x está en radianes.
  • c (x) : El coseno de x, x está en radianes.
  • a (x) : La arcotangente de x, arcotangente devuelve radianes.
  • l (x) : El logaritmo natural de x.
  • e (x) : La función exponencial de elevar e al valor x.
  • j (n,x) : La función de Bessel de orden entero n de x.
  • sqrt(x) : Raíz cuadrada del número x. Si la expresión es negativa, se genera un error de tiempo de ejecución. 

Además de las funciones matemáticas, también se admiten las siguientes funciones: 

  • length(x) : devuelve el número de dígitos en x.
  • read() : Lee el número de la entrada estándar.
  • scale(expression) : El valor de la función de escala es el número de dígitos después del punto decimal en la expresión. 
  • ibase y obase definen la base de conversión para los números de entrada y salida. El valor predeterminado tanto para la entrada como para la salida es base 10.
  • last (una extensión) es una variable que tiene el valor del último número impreso.

Ejemplos:  

Input:  
$pi=`echo "h=10;4*a(1)" | bc -l`
$echo $pi
Output: 3.14159265358979323844

Explicación: Asigne el valor de «pi» a la variable de shell pi. Aquí, a se refiere a la función arcotangente, que es parte de la biblioteca matemática cargada con la opción -l.  

Input: $echo "scale($pi)" | bc -l
Output: 20

Explicación: Da el número de dígitos después del punto decimal en el valor de «pi» calculado en el ejemplo anterior.  

Input: $echo "s($pi/3)" | bc -l
Output: .86602540378443864675

Explicación: da valores de seno en un ángulo «pi/3». El ángulo debe estar en radianes. Aquí, s se refiere a la función seno  

Input: $echo "c($pi/3)" | bc -l
Output: .50000000000000000001

Explicación: da valores de coseno en el ángulo «pi/3». El ángulo debe estar en radianes. Aquí, c se refiere a la función coseno.  

Input: $echo "e(3)" | bc -l
Output:20.08553692318766774092 

Explicación: Da un valor exponencial^como salida.  

Input: $echo "l(e(1))" | bc -l
Output: .99999999999999999999

Explicación: Da el logaritmo natural del valor iewrt base ‘e’.  

Input: $echo "obase=2;15" | bc -l
Output: 1111

Explicación: Convertir Decimal a Binario. 

Input: $echo "obase=8;9" | bc -l
Output: 11

Explicación: Convertir Decimal a Octal. 

Input: $echo "ibase=2;1111" | bc -l
Output: 15

Explicación: Convertir binario a decimal. 

Input: $echo "ibase=2;obase=8;10" | bc -l
Output: 2

Explicación: Convertir binario a octal. 

8. Declaraciones condicionales 

Las declaraciones condicionales se utilizan para tomar decisiones y ejecutar declaraciones basadas en estas decisiones. El comando bc admite la condición if. 

Sintaxis:  

if(condition) {statements} else {statements}

Ejemplo:  

Input: $echo 'n=8;m=10;if(n>m) print "n is greater" else print "m is greater" ' | bc -l
Output: m is greater

9. El 
comando bc de declaraciones iterativas admite el ciclo for y el ciclo while para realizar iteraciones. 

Sintaxis: 

for(assignment; condition; updation)
{
      statements.....
      .......
      ........
}

OR

while(condition)
{
      statements.....
      .......
      ........
}

Ejemplos:  

Input: $echo "for(i=1; i<=10; i++) {i;}" | bc
Output: 
1
2
3
4
5
6
7
8
9
10
Input: $echo "i=1;while(i<=10) {i; i+=1}" | bc
Output: 
1
2
3
4
5
6
7
8
9
10

Explicación: ambos ejemplos imprimen números del 1 al 10 utilizando la sintaxis de bucle respectiva. 
Algunas pseudo declaraciones :  

  • break : esta declaración provoca una salida forzada de la declaración while o for más reciente.
  • continuar : la instrucción continuar (una extensión) hace que la instrucción for envolvente más reciente inicie la siguiente iteración.
  • halt : La instrucción halt (una extensión) es una instrucción ejecutada que hace que el procesador bc se cierre solo cuando se ejecuta. Por ejemplo, «if (0 == 1) detener» no hará que bc termine porque no se ejecuta la detención.
  • return : Devuelve el valor 0 de una función. (Ver apartado de funciones).
  • return( expresión ) : Devuelve el valor de la expresión de una función. (Ver apartado de funciones). Como extensión, los paréntesis no son obligatorios.
  • limites : Imprime los límites locales aplicados por la versión local de bc. (Esta es una extensión).
  • quit : cuando se lee la sentencia quit, el procesador bc finaliza, independientemente de dónde se encuentre la sentencia quit. Por ejemplo, «if (0 == 1) quit» hará que bc termine.
  • garantía : Imprima un aviso de garantía. (Esta es una extensión).

10. Funciones: las funciones proporcionan un método para definir un cálculo que se puede ejecutar más tarde. Las funciones en bc siempre calculan un valor y lo devuelven a la persona que llama. Las definiciones de función son «dinámicas» en el sentido de que una función no está definida hasta que se encuentra una definición en la entrada. A continuación, se utiliza esa definición hasta que se encuentra otra función de definición para el mismo nombre. La nueva definición luego reemplaza la definición anterior. 

Sintaxis:  

define name (parameters) 
{
        statements.......
        .......
        ........
        return statement

} 

11. Podemos escribir nuestras expresiones aritméticas en un archivo y luego ejecutar esas declaraciones proporcionando el nombre del archivo al comando bc. 

Ejemplo:  

Input : 
$cat >> example.txt
2+5;
var = 10*3
var
print var
quit

Press ctrl+D

$bc example.txt
Output : 
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'.
7
30

PARA EVITAR MENSAJES GENERADOS POR EL SISTEMA EN LA PANTALLA DE SALIDA, UTILICE:  

$bc -q example.txt
Output :
7
30

12. Puntos importantes:  

  1. El comando Bc trata el punto y coma (;) o la nueva línea como separador de instrucciones.
  2. Para agrupar sentencias utilice las llaves. Úselo con funciones, instrucción if, bucles for y while.
  3. Si solo se especifica una expresión como declaración, el comando bc evalúa la expresión e imprime el resultado en la salida estándar.
  4. Si se encuentra un operador de asignación. El comando Bc asigna el valor a la variable y no imprime el valor en el terminal.
  5. Una función debe definirse antes de llamarla. Siempre la definición de la función debe aparecer primero antes de las declaraciones de llamada.
  6. Si se encuentra una variable independiente como declaración, el comando bc imprime el valor de la variable. También puede usar la declaración de impresión para mostrar la lista de valores en el terminal. 
     

Este artículo es una contribución de Akansh Gupta . Si te gusta GeeksforGeeks y te gustaría contribuir, también puedes escribir un artículo usando write.geeksforgeeks.org o enviar tu artículo por correo a review-team@geeksforgeeks.org. Vea su artículo que aparece en la página principal de GeeksforGeeks y ayude a otros Geeks. 

Escriba comentarios si encuentra algo incorrecto o si desea compartir más información sobre el tema tratado anteriormente. 

 

 

 

Publicación traducida automáticamente

Artículo escrito por GeeksforGeeks-1 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *