#!/bin/sh # Fritz Sieker #set -x #---------------------------------------------------------------------------- # get the testCases file, preferring one with the suffix getTestCases() { if [ -f testCases.${assignName} ] then name=$topDir/testCases.${assignName} elif [ -f testCases ] then name=$topDir/testCases else name= fi if [ -z "$name" ] then echo "Error: can not find testCases file" >&2 fi echo $name } #---------------------------------------------------------------------------- # extract field delimited by %, trim leading/trailing whitespace getPfield() { echo $2 | cut -d'%' -f$1 | sed -e 's/^[ \t]*//; s/[ \t]*$//' } #---------------------------------------------------------------------------- # determine number of point is assignment computeTotalPoints() { rm -f junk touch junk FS= sed -e "$sedCmd" $testCases | while read testCaseLine do points=`getPfield 2 "$testCaseLine"` echo $points >> junk done total=`sumCol.pl 1 junk` rm -f junk echo $total } #---------------------------------------------------------------------------- if [ $# -lt 1 ] then echo "Usage: genGrades [gradeDir]" echo echo "Ex: genGrades PA1" echo "Ex: genGrades PA1 ~/Checkin/PA1" exit 1 fi header="Assignment Grade:" assignName=$1 if [ $# -eq 2 ] then gradeDir=$2 else gradeDir=grades.${assignName} fi summaryFile=$gradeDir/SUMMARY # Recreate $summaryFile or just append? rm -f $summaryFile touch $summaryFile topDir=`pwd` testCases=`getTestCases` if [ -z "$testCases" ] then exit 1 fi # del everything after #; del leading/trailng whitespace; del blank lines sedCmd='s/#.*// ; s/^[ \t]*// ; s/[ \t]*$// ; /^$/d' maxValue=`computeTotalPoints` if [ -f gradeThese ] then list=gradeThese else list=~/Checkin/allLogins fi FS= for login in `sed -e "$sedCmd" $list` do if [ -n "$login" ] then echo "gen grade for: $login" gradeFile=$gradeDir/${login}.grade total=0 if [ -f $gradeFile ] then total=`genGrade $assignName $maxValue $gradeDir $login` fi echo "${login}, $total" >> $summaryFile fi done