Título: ¿Me puedes ayudar a simplificar una sentencia test en bash?... Publicado por: chuck3501 en 29 Mayo 2011, 20:55 pm Hola qué tal... soy nuevo por este foro... y estoy aquí peleándome con un shell-script, el cual me funciona perfectamente. Sólo que tengo que utilizar esta sentencia "test" en un if/then y no estoy muy contento con la forma que le he dado... Básicamente dice " si califr[$k] es igual a c ó x ó l" ....
¿ Me puedes ayudar a escribirla de otra manera más simple ? lo mismo no se puede.... ¿qué opinas? [ ${califr[$k]} = c -o ${califr[$k]} = x -o ${califr[$k]} = l ] Muchas gracias por interesate y por tu tiempo... Un saludo!!. Título: Re: ¿Me puedes ayudar a simplificar una sentencia test en bash?... Publicado por: leogtz en 29 Mayo 2011, 21:43 pm Un ejemplo:
Código
que es equivalente a : Código
que es equivalente a: Código
¿Para qué haces esto? ¿Una tarea de un profesor? Título: Re: ¿Me puedes ayudar a simplificar una sentencia test en bash?... Publicado por: chuck3501 en 29 Mayo 2011, 21:56 pm Gracias por contestar Leo... El caso es que la forma de la sentencia test sigue siendo la misma...es decir, se vuelve a especificar la igualdad 3 veces : si calif=l ó calif=x ó calif=c...... ta ta ta.....
Yo quisiera algo así : "si calif= "l" ó "x" ó "c" ... ta ta ta...."...... osea... no tener que concretar la igualdad 3 veces.... En fin, parece que tiene que ser así... no se..... Muchas gracias!! Título: Re: ¿Me puedes ayudar a simplificar una sentencia test en bash?... Publicado por: chuck3501 en 29 Mayo 2011, 21:58 pm Vaya.... te he estado contestando mientras añadías cosas a tu respuesta...... estoy leyendoo...
Título: Re: ¿Me puedes ayudar a simplificar una sentencia test en bash?... Publicado por: leogtz en 29 Mayo 2011, 22:08 pm La sintaxis así es, no se puede cambiar, o utiliza las demás simplificaciones que puse.
Título: Re: ¿Me puedes ayudar a simplificar una sentencia test en bash?... Publicado por: chuck3501 en 29 Mayo 2011, 22:22 pm No terminan de adaptarse tus soluciones a mi intención... todo mi "problema" se centra en la sentencia test ... solo quiero simplificarla..... y no es vital hacerlo... es ya saber cómo hacerlo si se puede....
Te mereces ver el supercódigo que he creado...... y buen tino.... es una "calculadora" adaptada a una prueba concreta para los alumnos... ;)... ahí va... a ver si ves alguna manera de simplificar la línea que puse en el primer post... Lo suelo arrancar mandando la salida de errores a /dev/null.... Al margen del asunto principal... si ves alguna "catetada" en el código, puedes comentarme lo que te parezca... solo quiero ir mejorando poco a poco.... #!/bin/bash b=s while [ $b = s ] do clear r=(20 30 40 50 70 30 50 60 70 80) o=(30 40 50 30 40 50 50 60 70 80) califr=(n n n n n n n n n n) califo=(n n n n n n n n n n) for k in 0 1 2 3 4 5 6 7 8 9 do until [ ${califr[$k]} = c -o ${califr[$k]} = x -o ${califr[$k]} = l ] #ESTO NO ME GUSTA ASI do echo -n "CALIFICACION Ritmo $((k+1)):" read califr[$k] if [ ${califr[$k]} != c -a ${califr[$k]} != x -a ${califr[$k]} != l ] then echo 'TE HAS EQUIVOCADO!!!.... REPITE ESTE DATO!!!' fi done done echo ${califr
for k in 0 1 2 3 4 5 6 7 8 9 do until [ ${califo[$k]} = c -o ${califo[$k]} = x -o ${califo[$k]} = l ] do echo -n "CALIFICACION Oido $((k+1)):" read califo[$k] if [ ${califo[$k]} != c -a ${califo[$k]} != x -a ${califo[$k]} != l ] then echo 'TE HAS EQUIVOCADO!!!.... REPITE ESTE DATO!!!' fi done done echo ${califo
for k in 0 1 2 3 4 5 6 7 8 9 do case ${califr[$k]} in c) califr_n[$k]=${r[$k]};; x) califr_n[$k]=0;; l) califr_n[$k]=$((${r[$k]}/2));; esac done echo PARCIAL DE RITMO: echo ${califr_n
for k in 0 1 2 3 4 5 6 7 8 9 do case ${califo[$k]} in c) califo_n[$k]=${o[$k]};; x) califo_n[$k]=0;; l) califo_n[$k]=$((${o[$k]}/2));; esac done echo PARCIAL DE OIDO: echo ${califo_n
sum_rit=0 for k in 0 1 2 3 4 5 6 7 8 9 do sum_rit=$((sum_rit+califr_n[$k])) done echo "SUMA TOTAL DE RITMO ES: $sum_rit" sum_oid=0 for k in 0 1 2 3 4 5 6 7 8 9 do sum_oid=$((sum_oid+califo_n[$k])) done echo "SUMA TOTAL DE OIDO ES: $sum_oid" suma_tot=$((sum_rit+sum_oid)) echo echo "****************************" echo "LA SUMA TOTAL ES: $suma_tot" echo "****************************" echo echo -n "¿OTRO ALUMNO? (s/n): " read b done exit |