SHELL笔记:-if-else,case练习

来源:互联网 发布:云计算格局 编辑:程序博客网 时间:2024/05/21 10:53

编写一段 shell 程序完成:根据从键盘输入的学生成绩,显示相应的成绩标准,也可以同时输入多个成绩,最多为5 个,以空格分隔。

要求:

1.分出不及格、及格、中、良和优秀等.

2.要有对*.?分的识别能力.

3.如果是多个成绩需要从高到低进行显示.

4.所使用的shell 语句不限.

5.以程序行数最少为最佳.


代码:

#!/bin/sh#function:将学生成绩进行分类,并将分类结果做一个从大到小的排列。#学生分数可以是整数,浮点数,可以识别出*,&,$等特殊字符check_num () {var1=$(echo $1 | bc 2>/dev/null)  if [ "$var1" != "$1" ]            #不是数字thenret=5elif [ `echo "$var1 < 0 || $var1 > 100" | bc 2>/dev/null` -eq 1 ]  #数字超过范围    then ret=0elif [ `echo "$var1 < 60" | bc 2>/dev/null` -eq 1 ]    #不及格then ret=1elif [ `echo "$var1 < 85" | bc 2>/dev/null` -eq 1 ]   #及格then ret=2elif [ `echo "$var1 < 95" | bc 2>/dev/null` -eq 1 ]   #优秀then ret=3else ret=4  #非常优秀fireturn $ret}get_para() {for var in $*               #0:这种格式是为了便于排序do{case "$var" in              *\?*) echo "0: $var :含有?号。" continue ;;         *\&*) echo "0: $var :含有&号。" continue ;;        *\**) echo "0: $var :含有*号。" continue ;;        *\$*) echo "0: $var :含有$号。" continue ;;esac  check_num $var    case "$?" in     "0") echo "0: $var: 该数字超过0-100范围。";;    "1") echo "$var: 不及格。";;    "2") echo "$var: 及格。";;    "3") echo "$var: 优秀。";;    "4") echo "$var: 非常优秀。";;    "5") echo "0: $var :这不是数字。";;      *) echo "0: $var :??";;    esac}done}while truedo{echo "请输入学生成绩序列(-1退出):"read numsnpara=$(echo "$nums" | wc -w)if [ 5 -lt $npara ]then echo "参数个数大于5!"continuefiif [ "$nums" = "-1" ]then echo "Goodbye."breakfiget_para "$nums" | sort -nr -t : -k 1,1}doneexit 0

结果抓图: