[ 实验目的 ]

理解Shell程序的设计方法;熟悉Shell程序的编辑、运行、调试方法与过程。 

[ 实验内容 ] 考勤模拟Shell程序设计

shell设计一个考勤模拟程序,实现如下功能选择界面:

1.上班签到

2.下班签出

3.缺勤信息查阅

4.退出

考勤程序运行后,提示用户输入上述功能选择,并验证用户输入的用户名和密码;用户信息保存在userinfo.dat中。

如果是上班签到,记录签到信息,如果签到时间大于上午8时,则提示用户迟到,并记录该迟到信息到check.dat

如果是下班签出,记录签出信息,如果签出时间小于下午6时,则提示用户早退,并记录该早退信息到check.dat

如果用户选择缺勤信息查询,则将check.dat中对应该用户的迟到早退信息查出并显示。

用户选择功能执行完,shell程序继续回到功能选择界面等待下一个用户进行操作。

 [实验要求 ]

 1、掌握Shell程序的编辑、运行、调试方法

2、完成实验内容要求实现的功能,并且上班签到、下班签出、缺勤信息查阅都要求用函数实现

3、撰写实验报告

 [实验方法 ]

1Shell程序的编辑可使用vi,emacsLinux下的各种文本编辑器。本课程实验可使用Red Hat Linux9.0下的Text Editor

2Shell程序的执行有两种方式:sh  [Shell程序名] ./ [Shell程序名]

例:设Shell程序名称为test.sh,则可以通过sh test.sh ./test.sh。但是要注意在使用./ [Shell程序名]时必须确保对Shell程序具有可执行权限。

3Shell程序的调试可以通过建立多个工作区交互进行。


新建文件Attendance.sh,源码如下:

#! /bin/bash
function show(){
    clear;
    echo "******** Welcome to Attendance System ********";
    echo "********       1.Check in             ********";
    echo "********       2.Check out            ********";
    echo "********       3.The record           ********";
    echo "********       4.Exit                 ********";
    echo "**********************************************";
    echo "Input your choice:";
}

function check_in(){
    echo " Please input your name";
    read name;
    echo " Please input your password";
    read password;
    if test -e /home/userdata.dat
    then 
        while read tem_name tem_password
        do
            #echo "name is $name";
            #echo "Input name is $tem_name";
            #echo "Input password is $tem_password";
            if test "$name" = "$tem_name"
            then
                #echo "Right"; 
                break;
            else
                #echo "False";
                continue;
            fi
        done < /home/userdata.dat
    else 
        echo "No such File,Please Check!";
    fi
    if test "$name" != "$tem_name"
    then 
        echo "No such user! Please check!"; 
    elif test "$password" != "$tem_password"
    then
        echo "Incorrect Password!";
    else
        hour=`date +%k`;
        #echo "$hour";
        if test $hour -ge 8
        then 
            echo "Check in Successfully ^_^ You are late!!";
            echo "$name    ---Late for Work ---Time: `date` " >>/home/check.dat
        else 
            echo "Check in Successfully ^_^ ";
        fi
    fi
}

function check_out(){
    echo " Please input your name";
    read name;
    echo " Please input your password";
    read password;
    if test -e /home/userdata.dat
    then 
        while read temp_name temp_password
        do
            #echo "name is $name";
            #echo "Input name is $tem_name";
            #echo "Input password is $tem_password";
            if test "$name" = "$temp_name"
            then
                #echo "Right"; 
                break;
            else
                #echo "False";
                continue;
            fi
        done < /home/userdata.dat
    else 
        echo "No such File,Please Check!";
    fi
    if test "$name" != "$temp_name"
    then 
        echo "No such user! Please check!"; 
    elif test "$password" != "$temp_password"
    then
        echo "Incorrect Password!";
    else
        hour=`date +%k`;
        #echo "$hour";
        if test $hour -lt 18
        then 
            echo "Check out Successfully ^_^ Leave early!!";
            echo "$name    ---Leave Early   ---Time: `date` " >>/home/check.dat
        else 
            echo "Check out Successfully ^_^ ";
        fi
    fi
}

function display_record(){
    #echo "$# parameters";
    if test $# -ne 0
    then
        echo "$1,Here are your records:";
        grep "$1" /home/check.dat;
    else 
        echo "Sorry,please check in first!";
    fi
}

function exit(){
    echo "Thanks for your use ^_^ ";
    isExit="1";
    #exit
}

function main(){
    while test "1"="1"
    do 
        show;
        read choice;
        case $choice in
            1)check_in;;
            2)check_out;;
            3)display_record $name;;
            4)exit;;
            *)echo "Incorrect input!";;
        esac
        read delay;
        #clear;
        if test "$isExit" = "1"
        then
            clear; 
            break;
        fi
    done
}
main;


运行结果:

【1】主界面:

【2】签到成功,但是迟到!

【3】用户名错误:

【4】签出成功,但是早退!

【5】查看迟到早退记录:

【6】退出程序,返回主界面:

【7】home文件夹下所有与本程序有关的文件:


GitHub 加速计划 / li / linux-dash
6
1
下载
A beautiful web dashboard for Linux
最近提交(Master分支:4 个月前 )
186a802e added ecosystem file for PM2 4 年前
5def40a3 Add host customization support for the NodeJS version 4 年前
Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐