Ayuda con script

Imagen de ekky
0 puntos

Saludos, soy un primerizo en esto de los scripts y en clase me han mandado uno que consiste en una ruleta, en la que podemos apostar par/impar o a un numero (del 0 al 36)
Después de pedir ayuda al profesor y ver que esto sigue dando error, acudo a vosotros a ver si hayáis el error

El error supongo se encuentra en el random puesto que al ejecutar el programa ambos me dan siempre un resultado de 0, he probado cambiando la linea del random (no estoy muy seguro como es su correcta escritura) pero siempre sigue dando error

Aquí os dejo el código y un enlace por si os es mas fácil la descarga
http://rapidshare.com/files/118317601/ej3_2_.sh

# !/bin/bash
numeromaquina=0
numapuesta=0
dinero=0
resultado=0
opcion=0
parimpar=0
resultadodoble=0
clear
echo "RULETA DE CASINO"
echo ""
echo ""
echo "============"
echo "||**-00-**||"
echo "||01-02-03||"
echo "||04-05-06||"
echo "||07-08-09||"
echo "||10-11-12||"
echo "||13-14-15||"
echo "||16-17-18||"
echo "||19-20-21||"
echo "||22-23-24||"
echo "||25-26-27||"
echo "||28-29-30||"
echo "||31-32-33||"
echo "||34-35-36||"
echo "============"
echo ""
echo ""
echo "Desea apostar por:"
echo "1) PAR O IMPAR"
echo "2) NUMERO"
read opcion
case $opcion in
1)
clear
echo "OPCION PAR/IMPAR"
echo "0) PAR"
echo "1) IMPAR"
read parimpar
# INICIO PRIMER RANDOM
((resultadodoble="$RAMDOM"%1))
if test "$resultadodoble" -eq "$parimpar"
echo "Espere mientras la ruleta gira"
sleep 2
then
echo ""
echo ""
echo "El numero que ha salido en la ruleta es $resultadodoble"
echo "HA GANADO"
else
echo ""
echo ""
echo "El numero que ha salido en la ruleta es $resultadodoble"
echo "HA PERDIDO"
fi
sleep 2
;;
2)
clear
echo "Introduzca el numero apuesta:"
read numapuesta
# echo "Introduzca la cantidad de dinero a apostar:"
# read dinero
# INICIO SEGUNDO RANDOM
((numeromaquina="$RAMDOM"%36))
if test "$numeromaquina" -eq "$numapuesta"
echo "Espere mientras la ruleta gira"
sleep 2
then
echo "El numero que ha salido en la ruleta es $numeromaquina"
# Si gana multiplicar apuesta *36
echo "HA GANADO"
echo ""
else
echo "El numero que ha salido en la ruleta es $numeromaquina"
echo "HA PERDIDO"
echo ""
fi
;;
*)
echo "Opcion incorrecta" ;;
esac
sleep 2
clear

Un saludo y gracias

Imagen de sansatan
+1
0
-1

De entrada, la sintaxis de la línea

((numeromaquina="$RAMDOM"%36))

no es correcta, faltan los espacios antes y después de los paréntesis. Pero a pesar de ello, esta forma de generar el número aleatorio no funciona, tienes que trabajar más esta línea, no basta con añadir los espacios.

Además tienes otros errores, uno de ellos en el uso del if justo debajo.

--------------------------------------

Un error muy frecuente: Confundir valor y precio.

+1
0
-1

--------------------------------------

Un error muy frecuente: Confundir valor y precio.

Imagen de joseluis
+1
0
-1

Ahora no tengo un Ubuntu a mano, pero lo he probado en una Debian antigua y la sintaxis es correcta salvo lo que le he comentado que debe ser RANDOM en lugar de RAMDOM y %2 en lugar de %1.

Y lo del if tienes razón, está incorrecto por unas líneas que hay entre el if y el then que no deberían ir ahí.


Fdo. Forense asesino, Censor fundamentalista, Fustigador de novatos y Patético maleducado

+1
0
-1

Imagen de joseluis
+1
0
-1

Si cuando calculas resultadodoble lo que quieres obtener es un valor entero entre 0 y 1 debes calcularlo con %2 (da de resto 0 ó 1) y no con %1 que siempre da de resto 0.

Además, tal vez sea un error al transcribirlo aquí pero por si acaso, si no estoy muy equivocado no es RAMDOM sino RANDOM, es decir la línea

((resultadodoble="$RAMDOM"%1))

debería ser

((resultadodoble="$RANDOM"%2))

Análogamente si al calcular numeromaquina pretendes conseguir un número entre 0 y 36 (incluidos) debes calcular %37 en lugar de %36


Fdo. Forense asesino, Censor fundamentalista, Fustigador de novatos y Patético maleducado

+1
0
-1

Imagen de sansatan
+1
0
-1

¿Estás probando lo que comentas o lo dices al vuelo?

--------------------------------------

Un error muy frecuente: Confundir valor y precio.

+1
0
-1

--------------------------------------

Un error muy frecuente: Confundir valor y precio.

Imagen de joseluis
+1
0
-1

Pues sí, como dije en otro comentario hice la prueba en un Debian (que era lo que tenía a mano en ese momento), pero te confirmo que la línea

((resultadodoble="$RANDOM"%2))

funciona también en Ubuntu (Ubuntu 8.04 para ser más exacto).
Hice la prueba porque a mí esa sintaxis me resultaba extraña, yo suelo usar para eso algo como:

resultadodoble=$(($RANDOM%2))

pero antes de indicar que la sintaxis era incorrecta preferí probarla por si funcionaba y vi que (tras sustituir el incorrecto RAMDOM por RANDOM) iba perfectamente (siempre se puede aprender algo de las preguntas).


Fdo. Forense asesino, Censor fundamentalista, Fustigador de novatos y Patético maleducado

+1
0
-1

Imagen de gus20
+1
0
-1

Hola! bueno mira a simple vista lo primero que a mi entender esta incorrecto es lo siguiente:

((resultadodoble="$RAMDOM"%1))

yo lo haria de la siguiente manera

resultadodoble=$((RANDOM%2))

Esto si te tiene que dar un numero entre 0 y 1

Espero que te sirva

Saludos

::Gustavo::

+1
0
-1
Imagen de charlye_bcn
+1
0
-1

Tengo el mismo problema y el random esta bien escrito, entres los if i los then no hay espacios, osea que tambien esta bien. Lo que pasa esque si le doy resultadodoble=0 arriba, luego siempre me la da como 0, y si no declaro resultadodoble=0 no me sale ningun valor para resultadodoble... Es como si random no le diera ningun valor...

+1
0
-1

Charlye

Imagen de sansatan
+1
0
-1

Vuelve a poner el script completo para ver cómo ha quedado.

--------------------------------------

Un error muy frecuente: Confundir valor y precio.

+1
0
-1

--------------------------------------

Un error muy frecuente: Confundir valor y precio.

Imagen de albert29
+1
0
-1

Si el $RANDOM no te esta dando ningun valor debe ser porque no lo reconoce, es decir, no estas llamando al interprete de comandos bash. Asi que o haces el fichero ejecutable (y lo ejecutas como ./nombre_script.sh) o lo ejecutas como "bash nombre_script.sh".

Por cierto que tienes un espacio entre el # ! inicial que no creo que afecte pero que yo no suelo ponerlo.

Desconozco si la sintaxis que utilizas para asignar el resultado de RANDOM es correcta (no me suena la verdad), la que es seguro correcta es la que te han propuesto por ahi: resultadodoble=$(($RANDOM%2)) y numeromaquina=$(($RANDOM%36)). Por cierto, que esta ultima te dara un numero entre 0 y 35 y no entre 1 y 36 pero bueno.

Otra cosa, no deberias poner codigo entre los if y el then, quita el "echo "Espere mientras la ruleta gira""
y el "sleep 2".

un saludo!

alberto

+1
0
-1
Imagen de slap
+1
0
-1

Desconozco si la sintaxis que utilizas para asignar el resultado de RANDOM es correcta

La expresión

((resultadodoble="$RANDOM"%20))

es correcta.
Es equivalente a:

let resultadodoble="$RANDOM"%20

y a la que proponéis:

resultadodoble=$(($RANDOM%20))

La sintaxis:

(( expr ))

Se puede usar para evaluar cualquier expresión aritmética y es equivalente a:

let expr

En realidad (( ... )) devuelve 0 (en el estado) si expr es distinto de cero y 1 en caso contrario, pero para acceder al resultado de la expresión evaluada hay que añadirle $ delante.
Por ejemplo, NO podemos hacer:

echo ((a=0))

Pero sí:

echo $((a=0))

o

((a=0))
echo $a

No sé si os he aclarado el tema u os he liado un poco más... :P
Saludos.
----
Slap

+1
0
-1

Saludos.

0000 start out (+FD),A
           ld  BC, +7FFF
           jp 03CB, RAM-CHECK

http://www.injiniero.es