1、脚本包含两个模块,脚本主体模块和功能模块。 2、功能模块 1)成绩上传函数add(){}:利用read命令读取上传的科目和成绩; case语句用来判断选择哪个科目,然后使用追加重定向将成绩存入文件info 2)成绩查询函数search(){}:直接打开存放成绩的文件info 3、脚本主体部分,包含以下内容: 1)使用while循环重复执行脚本主体内容; 2)输出成绩管理系统界面和选择的界面,1、成绩上传 2、成绩查询 3、退出; 3)要求使用case匹配对应的功能模块;选择1,调用成绩上传函数;选择2,调用成绩查询函数;选择3,退出shell;选择其他,提示输入错误;
时间: 2023-07-16 22:15:48 浏览: 66
好的,根据你的描述,可以给出如下的脚本示例:
```bash
#!/bin/bash
# 定义成绩文件路径和文件名
filename="./info"
# 成绩上传函数
function add() {
# 读取科目和成绩
read -p "请输入科目:" subject
read -p "请输入成绩:" score
# 根据科目选择写入的行数
case $subject in
"语文")
line=1
;;
"数学")
line=2
;;
"英语")
line=3
;;
*)
echo "输入的科目错误!"
return
;;
esac
# 将成绩写入文件
echo $score >> $filename.$line
echo "成绩上传成功!"
}
# 成绩查询函数
function search() {
# 打开成绩文件
exec 3<$filename.1
exec 4<$filename.2
exec 5<$filename.3
# 输出表头
printf "%-10s%-10s%-10s\n" "科目" "最高分" "最低分"
# 逐行读取成绩文件中的成绩并计算最高分和最低分
while read -u3 chinese && read -u4 math && read -u5 english; do
maxscore=$(echo "$chinese $math $english" | tr ' ' '\n' | sort -nr | head -n 1)
minscore=$(echo "$chinese $math $english" | tr ' ' '\n' | sort -n | head -n 1)
printf "%-10s%-10s%-10s\n" "语文" $maxscore $minscore
printf "%-10s%-10s%-10s\n" "数学" $maxscore $minscore
printf "%-10s%-10s%-10s\n" "英语" $maxscore $minscore
done
# 关闭文件描述符
exec 3<&-
exec 4<&-
exec 5<&-
}
# 脚本主体
while true; do
# 输出界面和选择提示
echo "======================="
echo " 成绩管理系统 v1.0 "
echo "======================="
echo "1. 成绩上传"
echo "2. 成绩查询"
echo "3. 退出"
read -p "请输入选项:" choice
# 根据选择调用对应的函数或退出脚本
case $choice in
"1")
add
;;
"2")
search
;;
"3")
echo "退出脚本,再见!"
exit 0
;;
*)
echo "输入的选项错误,请重新输入!"
;;
esac
done
```
这个脚本包含了两个模块,分别是成绩上传函数 `add()` 和成绩查询函数 `search()`。在脚本主体部分,使用 while 循环重复输出成绩管理系统的界面和选择提示,并根据用户的选择调用对应的函数或退出脚本。其中,添加成绩时使用了 case 语句来判断科目,并将成绩追加到对应的行数中;查询成绩时使用了文件描述符和 while 循环逐行读取成绩文件,并计算最高分和最低分并输出。
阅读全文