Ayuda con código Bash

Iniciado por bilbo, 23 Septiembre 2019, 16:51 PM

0 Miembros y 1 Visitante están viendo este tema.

bilbo

Hola, buenas. Me estoy adentrando en esto del scripting en batch y aún soy muy novato y seguro que el problema que tengo es una tontería, pero no logro dar con él. Estoy haciendo un código que hace que introduzcas un número y después te imprima por consola la tabla de multiplicar de ese número, pero hay algo que no me sale y no se por qué.

Este es el código
Código (bash) [Seleccionar]
@echo off
echo Bienvenido
set /p n= Introduce un numero

for %%x in ( 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ) do (
set /a z= %n% * %%x
echo %z%
)
pause


Este es el fallo que da




EdePC

Saludos,

- Primero, no confundir Bash de Linux con Batch de Windows.

- Segundo, recuerda que tienes la ayuda del mismo CMD, utilizando por ejemplo:

Código (dos) [Seleccionar]
Set /?

- En la ayuda muestra que Batch tiene una deficiencia en la actualización de variables dentro de bucles For, estos no se actualizan hasta que el bucle finalice. Para actualizar variables dentro de los bucles puedes usar EnableDelayedEspansion y cambiar %z% por !z!

-- He puesto solo a en lugar de %a% en el Set /a, ya que cuando se usa Set /a no es necesario encerrar a las variables entre %, Set /a siempre intentará resolver cualquier valor no numérico que tenga que operar ya que está hecho para operar números y no debería haber texto a no ser que sean nombres de variables.

Código (dos) [Seleccionar]
@echo off
SetLocal EnableDelayedExpansion
echo Bienvenido
set /p n="Introduce un numero: "

for %%x in ( 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 ) do (
set /a z= n * %%x
echo !z!
)

pause


CitarBienvenido
Introduce un numero: 7
7
14
21
28
35
42
49
56
63
70
Presione una tecla para continuar . . .

- Referencias: https://ss64.com/nt/delayedexpansion.html

bilbo