当前位置: 技术问答>linux和unix
请问能不能帮我改一下这个程序?我要输出重定向并可以用小数
来源: 互联网 发布时间:2016-10-14
本文导语: 编写一段bash shell程序,完成:根据从键盘输入的学生学号、成绩,通过计算成绩的等级后,把学生学号、成绩、成绩等级记录在mark.txt文件中。其中60分以下为“Failed!”,60-70分为“Passed!”,70-80分为“Medium!”,80-90分...
编写一段bash shell程序,完成:根据从键盘输入的学生学号、成绩,通过计算成绩的等级后,把学生学号、成绩、成绩等级记录在mark.txt文件中。其中60分以下为“Failed!”,60-70分为“Passed!”,70-80分为“Medium!”,80-90分为“Good!”,90-100为“Excellent!”。如果输入超过100的分数,则显示错误分数提示。
|
这道题 用AWK做非常简单, 跟写C语言差不多
重定向错误输出的语法为 2>/dev/null
#!/bin/bash
echo -n "please input a score: "
read i
echo "$i" | awk '
{
if($1~/^[0-9]+(.[0-9]+)*$/)
{
if($1 >= 90)
print $1, "Excellent!"
else if($1 >= 80)
print $1, "Good!"
else if($1 >= 70)
print $1, "Medium!"
else if($1 >= 60)
print $1, "Passed!"
else
print $1, "Failed!"
}
else
print "invalid input"
}'
重定向错误输出的语法为 2>/dev/null
|
ret=$(echo "$score>=60" | bc)
if [ $ret -eq 1 ]; then
echo "passed"
else
echo "failed"
fi
if [ $ret -eq 1 ]; then
echo "passed"
else
echo "failed"
fi
|
read i
if [ `echo "$i" | sed 's/[0-9.]//g'` ]
then
echo "invalid input"
exit
fi
if [ `expr $i >= 60` -ne 0 ]
then
echo "pass"
else
echo "fail"
fi
if [ `echo "$i" | sed 's/[0-9.]//g'` ]
then
echo "invalid input"
exit
fi
if [ `expr $i >= 60` -ne 0 ]
then
echo "pass"
else
echo "fail"
fi
|
引号可以省略, 那句话用sed的regular expression 对输入做简单的验证, 保证输入的是数字格式
|
if [ `echo "$i" | sed 's/[0-9.]//g'` ]
把$i里面所有的0~9的数字还有小数点都删掉,如果还有字符剩下,就认为输入非法
把$i里面所有的0~9的数字还有小数点都删掉,如果还有字符剩下,就认为输入非法
|