Duda script linux(crear un programa)

Tengo problemas en el apartado b del ejercicio porque me dice que en la linea 2 hay un error y me enseña el paréntesis "(". Igual es una chorrada por no prestar atención o igual algo que se tendría que saber como básico pero agradecería mucho la ayuda.

El enunciado es el siguiente:
Desarrolla los siguientes scripts, que has de guardar en el directorio scripts que creaste en el apartado I, respetando
el nombre de los mismos y la especificación de su funcionalidad:

(a) crearFicheros.sh: crea, en el directorio activo, una cierta cantidad de ficheros vacíos con una cierta extensión.
La cantidad de ficheros y la extensión serán dos parámetros del script. Por ejemplo:
$ ./crearFicheros.sh 215 PDF
crearía los siguientes 215 ficheros: 001.PDF, 002.PDF, . . . ,215.PDF. Tu script debe usar la orden seq; aunque
debes consultar su manual en línea para averiguar qué opción te interesa usar aquí (ya que eso no está en los
apuntes).

Respuesta:
#!/bin/bash
read -p "Dime el numero de archivos y la extension separados por un espacio en blanco": numero extension

for i in `seq 0 $numero`; do
touch $i.$extension
done



(b) generarTodos.sh: se basa en el script del apartado anterior (crearFicheros.sh) para crear la siguiente
cantidad de ficheros con sus extensiones correspondientes:
Extensión JPG PNG GIF PGM
Número de ficheros 15 130 75 44
Para escribir este script, inspírate en lo que hace el siguiente (y, por supuesto, en cómo lo hace). Fíjate en que
la variable ext es un vector, y la instrucción de la segunda línea lo que hace es asignar los valores de los cinco
elementos que queremos que tenga ese vector:

# ! / b i n / ba sh
e x t =(PDF pdf o d t doc DOC)
f o r i i n ${ e x t [  ] }
do
echo ${ i }
done


Respuesta:
#!/bin/bash
ext=(JPG PNG GIF PGM)
num=(15 130 75 44)

for i in ${ext[*]}; do

for j in `seq 0 $num[i]`; do
touch $j.$ext[i]
done

done


Un Saludo!
No te fies mucho de los errores que te devuelve el prompt cuando programas en bash. A mi a veces me decia un parentesis en la lini 10 y tenia el error en la linia 5. Fijate de no haber dejado espacios en blancos porque da error eso.

Y te aconsejo que los bucles y todo en general lo tabules para que te sea mas facil de leer y detectar errores, rollo asi:

for i in cadena
do
****loquetengasquehacer
done
(los * representan la tabulacion)

Parece una tonteria pero a mi me es mas facil detectar los errores.
Tambien asegurate de poner las tildes sueltas con la tecla a la derecha del 0, esta ' ' ' ' '
Muchas webs ponen scripts en bash pero... estas van con tildes ```` ´´´´ que son las que estan a la derecha de las teclas P y Ñ ... y estas no las reconoce como tal y dan error, prueba si esto resuelve tu problema ;)
gracias por los consejos y especialmente por la rectificación de la tilde (eso lo hacia, aunque no me he ha quejado aun), pero el problema sigue siendo el mismo...

generarTodos.sh: 2: Syntax error:"(" unexpected
1) Las comillas que tiene tu código estaban bien.
2) El error es que te falta un $ delante del (.
3) man bash

HTH, HAND
Gracias por tu ayuda, ahora ya por lo menos me da otro error xD, pero esto no lo entiendo:
Ferdy escribió:HTH, HAND


(Aviso soy bastante novato en esto!)
Lupoiu Myhay escribió:Gracias por tu ayuda, ahora ya por lo menos me da otro error xD, pero esto no lo entiendo:
Ferdy escribió:HTH, HAND


(Aviso soy bastante novato en esto!)


Prueba con ...
#!/bin/bash

if [ -z "$1" ] & [ -z "$2" ]; then
              echo Uso: $0 numero extension
              exit
          fi

for i in `seq 1 $1`; do
   touch $i.$2
done


Suerte en tu script ;)
Estoy gilipollas... NO tienes que poner un $ antes del (.

Mira a ver qué versión de bash tienes, no vaya a ser que sea tan antigua de no soportar arrays. Y comprueba que no pones espacios alrededor del '='.

- ferdy
7 respuestas