shell scripts; función dentro de for

Imagen de jomavaro
0 puntos

Hola, soy novato en linux y estoy intentando hacer un scripts que coja los valores del principio del scrips y los introduzca posteriormente en una variable para procesarlo. Me explico, tengo al principio del scripts lo siguiente:

10 cajas
14 bolsos
etc...

he pensado en meterlos en una función para poder procesarlos fila por fila con for:

valores () {
10 cajas
14 bolsos
}

for i in valores
do
variable1=`printf "%1s %sn" $i | awk ' {printf (NF)}`
variable2=`printf "%1s %sn" $i | awk ' {printf (NF-1)}`

echo $variable1 #esto me debería dar como valor 10 y después 14
echo $variable1 #esto me debería dar como valor cajas y después bolsos

done

No se si estoy equivocado en la forma de hacerlo. Gracias por vuestra ayuda.

Imagen de joseluis
+1
0
-1

No se si te valdrá, pero por si acaso ahí va:

#!/bin/bash

valores () {
echo "10 cajas
14 bolsos"
}

 variable1=`valores | awk '{printf "%s ",$1}'`
 variable2=`valores | awk '{printf "%s ",$2}'`

 echo ${variable1}
 # Esto da: 
 # 10 14
 echo ${variable2}
 # Esto da: 
 # cajas bolsos
 for i in ${variable1} ; do  
    echo $i
 done 
 # Lo anterior da:
 # 10
 # 14

 for i in ${variable2} ; do  
    echo $i
 done 
 # Lo anterior da:
 # cajas
 # bolsos

También podrías hacerlo con arrays (siempre que uses bash pues en ksh y csh no funcionan los arrays):

#!/bin/bash

valores () {
echo "10 cajas
14 bolsos"
}

 variable1=(`valores | awk '{printf "%s ",$1}'`)
 variable2=(`valores | awk '{printf "%s ",$2}'`)

 echo ${variable1[@]}
 # Esto da: 
 # 10 14
 echo ${variable2[@]}
 # Esto da: 
 # cajas bolsos
 echo ${#variable1[@]}
 # Lo anterior es el número de elementos del array, 
 # en este caso da:
 # 2
 echo ${#variable2[@]}
 # Lo anterior es el número de elementos del array, 
 # en este caso da:
 # 2

 for (( i=0; i<${#variable1[@]}; i++ )) {
   echo "$i - ${variable1[$i]}"
 }
 # Con el bucle anterior nos recorremos el array entero.
 # El resultado es:
 # 0 - 10
 # 1 - 14

 for (( i=0; i<${#variable2[@]}; i++ )) {
   echo "$i - ${variable2[$i]}"
 }
 # Igual que el anterior pero con variable2
 # El resultado ahora es:
 # 0 - cajas
 # 1 - bolsos

Y ya por último, en lugar de tener los datos dentro del script en la función valores podrías tenerlos en un fichero aparte, por ejemplo ~/misvalores.txt. En ese caso los scripts anteriores serían iguales salvo que no necesitarían función valores y que la asignación de variable1 y variable2 sería algo distinta:

 variable1=`cat ~/misvalores.txt | awk '{printf "%s ",$1}'`
 variable2=`cat ~/misvalores.txt | awk '{printf "%s ",$2}'`

o con arrays

 variable1=(`cat ~/misvalores.txt | awk '{printf "%s ",$1}'`)
 variable2=(`cat ~/misvalores.txt | awk '{printf "%s ",$2}'`)

  • La guia Ubuntu - solución a muchos problemas
  • Google y el buscador de ubuntu-es son tus amigos

Fdo. El forense asesino.

+1
0
-1

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

Imagen de jomavaro
+1
0
-1

Muchas gracias por tu ayuda. Ya he solucionado lo que quería, metiendolo dentro de una variable en vez de una función:

lista="
10 cajas
14 bolsos
etc..
"

y luego procesarlo con for.

 

Gracias por tus explicaciones, he aprendido varias cosas con tu ayuda, gracias

+1
0
-1