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!!.
Un ejemplo:
calif="h"
if test $calif = "1" -o $calif = "x" -o $calif = "l"
then
echo -e "Se cumple la condición";
else
echo -e "No se cumple";
fi
que es equivalente a :
calif="c"
test $calif = "c" -o $calif = "x" -o $calif = "l" && {
echo -e "Se cumple la condición";
} || {
echo -e "No se cumple";
}
que es equivalente a:
calif="x"
echo $calif | grep "^c\|l\|x$" &> /dev/null && echo Bien || echo Mal
¿Para qué haces esto?
¿Una tarea de un profesor?
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!!
Vaya.... te he estado contestando mientras añadías cosas a tu respuesta...... estoy leyendoo...
La sintaxis así es, no se puede cambiar, o utiliza las demás simplificaciones que puse.
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
- }
echo
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 - }
echo
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 - }
echo
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 - }
echo
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