一个简单地Shell-like 的实现

13 篇文章 0 订阅
7 篇文章 0 订阅

下面的一个程序是shell的简单实现,虽然简单,但是原理是相同的。请仔细体会。


//shell-like function

#include "apue.h"

#include <sys/wait.h>

int main(int argc, char *argv[])

{

        char buf[MAXLINE];

        pid_t pid;

        int status;


        printf("%% ");

        while (fgets(buf, MAXLINE, stdin) != NULL)

        {

                if (buf[strlen(buf)-1] == '\n')

                {

                        buf[strlen(buf)-1] = 0;

                }


                if ((pid  = fork()) < 0)

                {

                        printf("err\n");

                }

                else if (pid == 0) /* child */

                {

                        execlp(buf, buf, (char *)0);

                        exit(127);

                }


                /*  parent */

                if ((pid = waitpid(pid, &status, 0)) < 0)

                {

                        printf("error\n");

                }


                printf("%% ");

        }

        return(0);

}

这个问题比较大,需要分步骤来实现。 1. 创建学生项目课题信息管理系统的数据库 可以使用MySQL等数据库管理系统,创建一个名为"project_info"的数据库,其中包括以下两个表: - student_info: 学生信息表,包括学生姓名、学号、专业等字段。 - project_list: 课题列表,包括课题名称、指导老师、选题状态等字段。 2. 编写Shell脚本 创建一个名为"project_manage.sh"的Shell脚本文件,包括以下功能: - 添加学生信息:输入学生信息后,将学生信息添加到student_info表中。 - 添加课题信息:输入课题信息后,将课题信息添加到project_list表中。 - 查看学生信息:可以按照学生姓名或学号进行查找,输出学生信息。 - 查看课题信息:可以按照课题名称或指导老师进行查找,输出课题信息。 - 修改选题状态:可以输入学生学号和课题名称,修改选题状态。 - 删除学生信息:可以输入学生学号,删除该学生信息。 - 删除课题信息:可以输入课题名称,删除该课题信息。 3. 实现Shell脚本 以下是一个简单的示例代码: ``` #!/bin/bash # 添加学生信息 function add_student_info() { echo "请输入学生姓名:" read name echo "请输入学生学号:" read id echo "请输入学生专业:" read major mysql -u root -p -e "INSERT INTO student_info (name, id, major) VALUES ('$name', '$id', '$major')" project_info echo "添加成功!" } # 添加课题信息 function add_project_info() { echo "请输入课题名称:" read name echo "请输入指导老师:" read teacher echo "请输入选题状态(0表示未选,1表示已选):" read status mysql -u root -p -e "INSERT INTO project_list (name, teacher, status) VALUES ('$name', '$teacher', '$status')" project_info echo "添加成功!" } # 查看学生信息 function show_student_info() { echo "请输入要查找的学生信息(姓名或学号):" read keyword mysql -u root -p -e "SELECT * FROM student_info WHERE name LIKE '%$keyword%' OR id LIKE '%$keyword%'" project_info } # 查看课题信息 function show_project_info() { echo "请输入要查找的课题信息(名称或指导老师):" read keyword mysql -u root -p -e "SELECT * FROM project_list WHERE name LIKE '%$keyword%' OR teacher LIKE '%$keyword%'" project_info } # 修改选题状态 function update_project_status() { echo "请输入学生学号:" read id echo "请输入课题名称:" read name echo "请输入新的选题状态(0表示未选,1表示已选):" read status mysql -u root -p -e "UPDATE project_list SET status='$status' WHERE name='$name' AND id='$id'" project_info echo "修改成功!" } # 删除学生信息 function delete_student_info() { echo "请输入要删除的学生学号:" read id mysql -u root -p -e "DELETE FROM student_info WHERE id='$id'" project_info echo "删除成功!" } # 删除课题信息 function delete_project_info() { echo "请输入要删除的课题名称:" read name mysql -u root -p -e "DELETE FROM project_list WHERE name='$name'" project_info echo "删除成功!" } # 主菜单 while true do echo "欢迎使用学生项目课题信息管理系统" echo "1. 添加学生信息" echo "2. 添加课题信息" echo "3. 查看学生信息" echo "4. 查看课题信息" echo "5. 修改选题状态" echo "6. 删除学生信息" echo "7. 删除课题信息" echo "0. 退出系统" echo "请输入功能编号:" read option case $option in 1) add_student_info ;; 2) add_project_info ;; 3) show_student_info ;; 4) show_project_info ;; 5) update_project_status ;; 6) delete_student_info ;; 7) delete_project_info ;; 0) exit 0 ;; *) echo "输入有误,请重新输入!" ;; esac done ``` 注意:以上示例代码仅供参考,实际应用中还需要进行输入合法性判断、错误处理等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值