-
Notifications
You must be signed in to change notification settings - Fork 0
/
corrigeAlumno.sh
179 lines (151 loc) · 4.31 KB
/
corrigeAlumno.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
#!/bin/bash
# Corrector practicas Explotacion de la Informacion
# Modificacion de Antonio Ferrandez sobre la version de:
# (c) Sergio Lujan Mora, 2001
#################################################
# SE EJECUTA DESDE EL DIRECTORIO QUE CONTIENE src lib include (p.ej. ./corrigeAlumno.sh desde el directorio que contiene src lib include)
# DICHO DIRECTORIO NO CONTENDRA NINGUN ARCHIVO $EJE (p.ej. ya que en este fichero EJE=practica1, en ese directorio no podra haber ningun fichero que se llame "practica1")
# DICHO DIRECTORIO CONTENDRA UN FICHERO makefile QUE GENERE EL EJECUTABLE $EJE CUYO PROGRAMA PRINCIPAL SERA $MAIN (p.ej. ya que en este fichero EJE=practica1, el makefile ha de crear un ejecutable de nombre "practica1", como el makefile mostrado en la siguiente seccion )
# EL SUBDIRECTORIO src:
# * CONTENDRA LOS FICHEROS DE PRUEBA: *.cpp
# * SUS SALIDAS CORRESPONDIENTES *.cpp.sal
# * NO CONTENDRA NINGUN ARCHIVO $MAIN (el directorio src no debe contener ningun archivo con nombre "main.cpp" ya que MAIN=main.cpp)
#
# corrigeAlumno
#################################################
# PARAMETROS A CAMBIAR
#
# Fichero makefile
MAKE1=makefile
# Fichero que contiene el main en el makefile
MAIN=main.cpp
# Nombre del ejecutable en el makefile
EJE=practica1
#################################################
# Directorio raiz
CASA=.
# Directorio ficheros de prueba
DIROK1=./src
MAKE2=$MAKE1
MAKEDIR=$CASA
# Directorio del alumno
DIRALU=.
# Temporal salida estandar
NOMTMPSAL=lwdhfb.tmp
# Temporal salida de error
NOMTMPERR=jfgskv.tmp
# Temporal auxiliar
NOMTMPAUX=qwekjz.tmp
# Temporal auxiliar para OKs
NOMTMPOK=123oks123.tmp
# Elimina el temporal que cuenta los oks
if test -e $NOMTMPOK;
then
rm $NOMTMPOK
fi
# Elimina el temporal que cuenta los oks
if test -e corrigeUno.log;
then
rm corrigeUno.log
fi
# Elimina el temporal que cuenta los oks
if test -e corrigeUnoBD.log;
then
rm corrigeUnoBD.log
fi
# Elimina el temporal que cuenta los oks
if test -e corrigeUno.res;
then
rm corrigeUno.res
fi
function testOK()
{
if test -e $DIRALU/$EJE;
then
# Existe el ejecutable
$DIRALU/$EJE > $NOMTMPSAL 2> $NOMTMPERR
echo "###------------ stderr ($auxPROG) --------------"
cat $NOMTMPERR
MENERR=$(cat $NOMTMPERR)
echo "###------------ correccion --------------------"
# Para no tener en cuenta espacios en blanco: -b
# Para no tener en cuenta lineas de mas: -B
# Para ignorar mayusculas/minusculas: -i
# Ejemplo: DIFF=$(diff -b -B -i $1.sal $NOMTMPSAL)
DIFF=$(diff -bB $1.sal $NOMTMPSAL)
if test -z "$DIFF";
then
if test -z $MENERR;
then
echo -e "OK\n"
echo "OK" >> $NOMTMPOK
else
echo -e "REG\n"
echo "REG" >> $NOMTMPOK
fi
else
echo "$DIFF"
echo "ERROR" >> $NOMTMPOK
fi
else
# No existe el ejecutable
echo -e "Error: NO EXISTE EL EJECUTABLE\n"
echo -e " Posible problema al compilar\n"
echo "ERROR" >> $NOMTMPOK
fi
}
function corrige()
{
# Empieza la correccion
for FICH in $DIROK1/*.cpp;
do
echo -e "\n----------------------------------------------"
echo -e $FICH
echo -e "----------------------------------------------\n"
# Copia el fichero de prueba
cp $FICH $DIROK1/$MAIN
# Borra el ejecutable anterior
if test -e $DIRALU/$EJE;
then
rm $DIRALU/$EJE
fi
if test -e $DIRALU/$EJE.o;
then
rm $DIRALU/$EJE.o
fi
make -f $MAKE1 -s
testOK $FICH
done
# Cuenta el numero de OK, REG y ERROR
echo -e "\n-------------------------"
# La instruccion sed elimina los espacios en blanco iniciales
VAR=$(grep OK $NOMTMPOK | wc -w | sed -e '1,$ s/^[ ]*//')
echo "# CORR. OKs: $VAR"
echo -n "$VAR:" >> corrigeUno.res
VAR=$(grep REG $NOMTMPOK | wc -w | sed -e '1,$ s/^[ ]*//')
echo "# CORR. REGs: $VAR"
echo -n "$VAR:" >> corrigeUno.res
VAR=$(grep ERROR $NOMTMPOK | wc -w | sed -e '1,$ s/^[ ]*//')
echo "# CORR. ERRORs: $VAR"
echo -n "$VAR:" >> corrigeUno.res
# Elimina el fichero auxiliar
rm $NOMTMPOK
echo "-------------------------"
# Elimina los ficheros temporales
rm $NOMTMPSAL
rm $NOMTMPERR
# Elimina el ultimo fichero
if test -e $DIRALU/$EJE.cpp;
then
rm $DIRALU/$EJE.cpp
fi
if test -e $DIRALU/$EJE;
then
rm $DIRALU/$EJE
fi
if test -e $DIRALU/$EJE.o;
then
rm $DIRALU/$EJE.o
fi
}
corrige $DIROK1 $MAKE1