操作系统实验课程作业shell编程 有文本文件student.txt,该文件是所有学生的信息,每个学生存储一行信息 - 图文

发布时间 : 星期六 文章操作系统实验课程作业shell编程 有文本文件student.txt,该文件是所有学生的信息,每个学生存储一行信息 - 图文更新完毕开始阅读

分支结构

If 判断 :then T块 Else F块 fi

判断 test语句 test表达式 = [表达式]

表达式进行文件判断 -f 文件名 (检测该文件是否存在且为普通文件) -d 目录名 -r 可读 -w 可写 -x 可执行

五、程序设

程序为bash程序,进行修改的txt文件为student.txt,在Shell程序运行的目录下建立一个temp目录,用来保存运行过程中的临时文件。包含有8个函数,每个函数实现相应的功能: set_menu_choice()

显示一个界面菜单,提示所能进行的操作以及选项的使用格式。同时获得输入的内容,存放在choice。

get_confirm()

判断输入是否为y|yes|Y|Yes|YES,是则返回0,表示删除;如果n|no|N|No|NO,则表

-5-

示取消删除操作。

insert_student():

将所有输入的信息通过重定向写入student.txt。

check_student():

使用awk命令以“:”为分隔符将输入的学号与txt文件的学号进行匹配; 如果该学号存在,则设存在标记student_existingFlag=y;否则 student_existingFlag=n。

stat_student()

调用check_student(),根据存在标记student_existingFlag,如果为n,则输出 学生信息不存在;如果为y,则通过awk命令输出学号所对应的列。

add_student()

调用check_student(),判断student_existingFlag是否为y,如果为y则显示 该学生信息已存在;否则调用insert_student()将学生信息插入student.txt。

delete_student()

调用check_student(),判断student_existingFlag是否为n,如果为n,则显示 该学生信息不存在;否则调用confirm_delete确定是否删除,如果确定则调用delete_student()删除学生信息。

delete_infomation()

-6-

删除操作,使用awk命令将student.txt文件中学号不等于输入的学号的所有 列重定向输出到临时文件temp_file中,再将temp_file中的内容通过cp命令复制到student.txt文件中,覆盖原来的内容,即完成删除操作。

最后主程序,首先连接student.txt文件,并清屏。设置一个while循环,当退出标记exit不为y时,进行循环获取输入的选项;调用set_menu_choice()设置界面,通过case命令判断输入choice_input,当为a时,调用add_student(),添加学生信息;当为d时,调用delete_infomation(),删除学生信息;当为s时,调用stat_student(),显示当前学号对应的学生信息;如果输入的是其他内容,则给出提示信息,重新输入。

六、shell程序调试

Shell程序的调试主要是利用bash命令解释程序的选择项。 调用bash的形式是:

bash -选择项Shell程序文件名几个常用的选择项是: -e 如果一个命令失败就立即退出。 -n 读入命令但是不执行它们。 -u 置换时把未设置的变量看做出错。 -v 当读入Shell输入行时把它们显示出来。 -x 执行命令时把命令和它们的参数显示出来。

七、程序源代码及运行结果截图 #! /bin/bash

###简单的学生信息管理程序 ###fileName:student.sh

###学生的信息存放在student.txt中

###需要在当前运行目录建立temp目录存放临时文件 ###Usage:./student.sh

-7-

###交互式执行: -a 学号:姓名:性别:专业 添加学生信息 ###交互式执行: -s 学号 显示对应学生信息 ###交互式执行: -d 学号 删除对应学生信息 ###交互式执行: -q(-Q) 退出管理程序 ###Author:Libaocan

menu_choice=\ student_infomation=\ student_existingFlag=\ current_student=\

student_file=\ temp_file=./temp/student.$$; trap 'rm -f $temp_file' EXIT;

set_menu_choice() {

clear;

echo \ echo

echo \ echo \学号:姓名:性别:专业\ echo \ echo \学号\

echo \ echo \学号\

echo \ echo eg:-l

-8-

联系合同范文客服:xxxxx#qq.com(#替换为@)