天天看点

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

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

要求:

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

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

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

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

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

代码:

#!/bin/sh
#function:将学生成绩进行分类,并将分类结果做一个从大到小的排列。
#学生分数可以是整数,浮点数,可以识别出*,&,$等特殊字符
check_num () {
	var1=$(echo $1 | bc 2>/dev/null)  
	if [ "$var1" != "$1" ]            #不是数字
	then		ret=5
	elif [ `echo "$var1 < 0 || $var1 > 100" | bc 2>/dev/null` -eq 1 ]  #数字超过范围    
	then 		ret=0
	elif [ `echo "$var1 < 60" | bc 2>/dev/null` -eq 1 ]    #不及格
	then 		ret=1
	elif [ `echo "$var1 < 85" | bc 2>/dev/null` -eq 1 ]   #及格
	then 		ret=2
	elif [ `echo "$var1 < 95" | bc 2>/dev/null` -eq 1 ]   #优秀
	then 		ret=3
	else 		ret=4  #非常优秀			
	fi
	return $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 true
do
{
	echo "请输入学生成绩序列(-1退出):"
	read nums
	npara=$(echo "$nums" | wc -w)
	if [ 5 -lt $npara ]
	then 		echo "参数个数大于5!"
				continue	
	fi
	if [ "$nums" = "-1" ]
	then 		echo "Goodbye."
				break
	fi
	get_para "$nums" | sort -nr -t : -k 1,1
}
done
exit 0
           

结果抓图:

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