Scripts en bash y declare: not found

xPipOx

Necesito una variable de tipo numerica entera para ello necesitas declararla asi si no me equivoco, declare -i precio = 20 por ejemplo. Al hacer esto el Script me dice declare: not found.

Alguna solucion? He pillado ejemplos por internet y me pone lo mismo con ejemplos como:

#!/bin/bash
declare -i val3=12 val4=5
declare -i result2
result2=val3*val4
echo $result2

Pero sigue con el puto declare: not found. ¿Puede ser por la distribucion?

D

echa un ojo al ejemplo de aquí

http://bash.cyberciti.biz/guide/Create_an_integer_variable

1 respuesta
skv

Una pregunta desde mi ignorancia en bash: cual es la ventaja de declarar una variable como entero? O dicho de otra manera: por qué necesitas declarar una variables como entero, no podrías hacer simplemente esto?:

  
#!/bin/bash val3=12 val4=5 let result2=$val3*$val4 echo $result2

PD: He testeado el código que has puesto y a mi me funciona perfectamente.

1 respuesta
xPipOx

#3 Ok no se si tendra ventajas o no pero he leido en mil sitios que se puede. Quiza es algo anticuado y ya las trata como enteros perfectamente sin decirle nada o que se yo, pero en un manual que tengo viene y por internet lo he visto en varias paginas, al igual que para hacer arrays podias hacer un declare http://www.unix.com/solaris/52962-i-cannot-give-array-declaration-shell-script.html.

Pero vamos es que necesito operar con una variable para que sea otra variable tipo:

var2=(var13)+2 y lo que me sale es el texto del valor de var13+2 vamos no hace la operacion. Quiza tengo que poner algo mas, ayer creo que vi algo con un $ delaente o algo asi pero es que estuve comiendome la cabeza y no me salia, a ver hoy que estoy mas despejado xD.

Siguiendo el ejemplo de #2 es que no me coge el puto declare -i xD

1 respuesta
skv

#4 Tienes que poner el let, como te puse en mi ejemplo:

#!/bin/bash

var1=5
let var2=($var1*3)+2
echo $var2
2 respuestas
xPipOx

#5 Uh no lo vi, ok me pondre a ello a ver si me sale asi. Muchas gracias, pero ando con curiosidad de por que no puedo usar el declare jajaja. Gracias : )

xPipOx

#5 Con los parentesis me pone error de sintaxis y sin ellos no me opera xD.

precio=20
let idavuelta=$precio*2/100*20

Al poner echo $idavuelta no hace nada : (

Tambien he visto este code por ahi

precio=20
idavuelta=$[$precio2/10020]

Pero tampoco me va zZzZ.

1 respuesta
skv

#7 Este código que has puesto tu a mi me funciona perfectamente, el problema es que da 0 porque let solo es capaz de hacer operaciones en aritmética entera. Para aritmética en punto flotante como la que necesitas, te recomiendo usar bc. Lo anterior se traduce a:

#!/bin/bash

precio=20
idavuelta=$(echo $precio*2*0.01*20 | bc)
echo $idavuelta

Si esto o lo anterior no te funciona, creo que deberias poner aquí el script completo, porque tiene que ser otra cosa la que está fallando.

xPipOx

Uhm ahora si pero entonces para hacer $precio2 - $precio20.0120

Vamos con dos variables se hacerlo pero no puedes hacer un let con un bc? xD

Bueno paso de liarme con lo que me has dado me sobra si me contestas a eso ya genial.

ARG

precio=20
descuento=$(echo $precio*2*0.01*20 | bc)
let idavuelta=$precio*2-$descuento
echo $idavuelta

No me funciona me pone que let not found. La cuestion es que el billete vale 20€ y si pillas idayvuelta vale 40€ con un 20% de descuento 40€-8€.

#!/bin/bash

precio=20
descuento=$(echo $precio*2*0.01*20 | bc)
let idavuelta=$precio*2-$descuento
echo $idavuelta

ese es todo el codigo no hay mas xD

skv

La resta de un entero y un número real es un número real, por lo que tampoco puedes usar let. Puedes hacerlo todo seguido o en dos partes, de la siguiente forma:

precio=20

descuento=$(echo $precio*2*0.01*20 | bc)
idavuelta=$(echo $precio*2-$descuento | bc)
echo $idavuelta


idayvuelta=$(echo $precio*2-$precio*2*0.01*20 | bc)
echo $idayvuelta
1 respuesta
xPipOx

#10 Buf por fin gracias xD, tengo la cabeza saturada ya ni pienso, espero que con esto ya pueda resolver los demas ejercicios.

Muchisimas gracias, un saludo.

Usuarios habituales

  • xPipOx
  • skv
  • DiSKuN