Korn Shell Script为变量设置参数,添加和平均以及if-else问题

时间:2014-04-06 00:04:58

标签: shell variables unix arguments

我正在使用Korn shell脚本编写一个程序,该脚本实际上使用了两个不同的脚本,一个名为grade.sh,另一个名为GRADE.sh。在GRADE.sh中,它应该接受6个参数并将它们设置为等于变量,然后打印这些变量并找到你的成绩总和以及你的成绩的平均值。然后根据您的平均值确定您的字母等级。 grade.sh基本上是一个格式化脚本,以有组织的方式打印出GRADE.sh的内容。这是代码。我无法获得总和和平均值,也遇到了if语句的问题。如果你能帮助我找出我做错事的地方,我会非常感激!

grade.sh:

#! /bin/ksh
#Description: Prints out a grade report for multiple students.

printf "Date:"
printf "`date|cut -c1-10`,"
printf `date|cut -c25-28`
printf "\n"
print "Name  Prog  Labs  Midterm  Final  Total  Avg  Grade"

GRADE.sh Akers John 90 88 80 70
GRADE.sh Eckert Hester 80 90 67 89
GRADE.sh Spence Frances 70 81 78 85
GRADE.sh Shaw Mary 88 79 90 78
GRADE.sh Gates William 67 66 80 90
GRADE.sh Thompson Ken 80 60 90 89

GRADE.sh:

#! /bin/ksh
#Description: Calculate total score and average of a student's grades.

fName=$2
lName=$1
prog=$3
lab=$4
mid=$5
final=$6

sum= $prog+$lab+$mid+$final
avg= $sum/4

printf "$fName $lName $prog $lab $mid $final"

if($avg>=90&&$avg<=100)
then
    printf "%s" A
    printf "\n"
elif($avg>=80&&$avg<90)
then
    printf "%s" B
    printf "\n"
elif($avg>=70&&$avg<80)
then
    printf "%s" C
    printf "\n"
elif($avg>=60&&$avg<70)
then
    printf "%s" D
    printf "\n"
else
    printf "%s" F
    printf "\n"
fi

我提前道歉,对Korn Shell的编码很新,这是我在这里发表的第一篇文章。谢谢你的帮助!

1 个答案:

答案 0 :(得分:1)

这是让你入门的东西。请注意,您不需要两个脚本。您可以创建一个执行放坡的函数,并在脚本中调用该函数。您可以使用if .. then .. else,我只是使用case语句向您展示了另一个选项。此外,如果您使用printf,则使用它来格式化输出。我会把它留给你。

#!/bin/ksh

get_grade() {
    local fName=$2
    local lName=$1
    local prog=$3
    local lab=$4
    local mid=$5
    local final=$6
    local sum=$((prog + lab + mid + final))
    local avg=$((sum / 4))

    printf "$fName $lName $prog $lab $mid $final"

    case 1 in 
        $((avg >= 90 && avg <= 100)))
            printf " %s\n" A ;;
        $(( avg >= 80 && avg < 90)))
            printf " %s\n" B ;;
        $((avg >= 70 && avg < 80)))
            printf " %s\n" C ;;
        $((avg >= 60 && avg < 70)))
            printf " %s\n" D ;;
        *)
            printf " %s\n" F ;;
    esac
}
printf "$(date +"Date: %a %b %d, %Y")\n"
printf "Name  Prog  Labs  Midterm  Final  Total  Avg  Grade\n"

get_grade Akers John 90 88 80 70
get_grade Eckert Hester 80 90 67 89
get_grade Spence Frances 70 81 78 85
get_grade Shaw Mary 88 79 90 78
get_grade Gates William 67 66 80 90
get_grade Thompson Ken 80 60 90 89

输出:

Date: Sat Apr 05, 2014
Name  Prog  Labs  Midterm  Final  Total  Avg  Grade
John Akers 90 88 80 70 B
Hester Eckert 80 90 67 89 B
Frances Spence 70 81 78 85 C
Mary Shaw 88 79 90 78 B
William Gates 67 66 80 90 C
Ken Thompson 80 60 90 89 C