模拟Linux文件管理员系统-shell实现

  • 模拟Linux文件管理员系统-shell实现已关闭评论
  • 164 次浏览
  • A+
所属分类:linux技术
摘要

注:此脚本仅供学习使用,具体需要根据实际情况进行测试调整。用空格隔开,从左往右依次为:
用户名 密码 是否为管理员(1为管理员0为普通用户) 是否被锁定(1被锁定0为解锁)

模拟Linux文件管理员系统-shell实现

注:此脚本仅供学习使用,具体需要根据实际情况进行测试调整。

1 系统要求

模拟Linux文件管理员系统-shell实现

2 脚本执行效果

2.1 管理员登录效果

模拟Linux文件管理员系统-shell实现

2.2 普通用户登录效果

模拟Linux文件管理员系统-shell实现

2.3 密码文件格式

用空格隔开,从左往右依次为:
用户名 密码 是否为管理员(1为管理员0为普通用户) 是否被锁定(1被锁定0为解锁)

模拟Linux文件管理员系统-shell实现

3 实现脚本

[root@waluna ~]# cat Log_in.sh #!/bin/bash # #************************************************** #Author:                Xan_Yum #QQ:                    7993167 #Email:                 waluna@qq.com #Version:               1.0 #Date:                  2022-06-12 #FileName:              Log_in.sh #Description:           The test script #URL:                   https://blog.waluna.top #Copyroght (C):         2022 ALL rights reserved #**************************************************  ############################## 函数区 ###############################  # 参数获取 ARGS(){     USER_PASSWD=`grep -E "^${USER} " auth.pass`     USERR=`echo $USER_PASSWD | cut -d' ' -f1`     PASSWDR=`echo $USER_PASSWD | cut -d' ' -f2`     ADMIN=`echo $USER_PASSWD | cut -d' ' -f3`     LOCK=`echo $USER_PASSWD | cut -d' ' -f4` }  # 创建新用户 NEW_USER(){     read -p "请输入要创建的用户名:" USER     ARGS     if [ -n "$USERR" ];then         echo "用户已存在"         if [ -d $USER ];then             echo "${USER} `date +%F_%T`" > ${USER}/${USER}.log         else             mkdir $USER             echo "${USER} `date +%F_%T`" > ${USER}/${USER}.log         fi     else         read -sp "请输入新用户的密码:" PASSWD         echo "${USER} ${PASSWD} 0 0" >> auth.pass         if [ -d $USER ];then             echo "${USER} `date +%F_%T`" > ${USER}/${USER}.log         else             mkdir $USER             echo "${USER} `date +%F_%T`" > ${USER}/${USER}.log         fi         echo "${USER}用户创建完成"     fi }  # 删除旧用户 DEL_USER(){     read -p "请输入要删除的用户名:" USER     ARGS     if [ -n "$USERR" ];then         sed -ri.bak "/^${USER}/d" auth.pass         rm -rf ${USER}         echo "${USER}用户已删除"     else         echo "${USER}用户不存在"     fi }  # 解锁用户 UNLOCK_USER(){     read -p "请输入要解锁的用户名:" USER     ARGS     if [ -n "$USERR" ];then         if [ ${LOCK} -eq 1 ];then             sed -ri.bak "s/^(${USERR}.* )1$/10/" auth.pass             echo "${USERR}用户已解锁"         else             echo "${USERR}用户没有被锁定"         fi     else         echo "您输入的用户名不存在"     fi }  # 权限管理 PRI_MAN(){     read -p "请输入要设置权限的用户名:" USER     ARGS     if [ -z "${USER}" ];then         echo "用户名不能为空!"     elif [ "${USER}" = "admin" ];then         echo "admin用户不允许更改"     elif [ -n "$USERR" ];then         read -p "请输入要设置的权限(0为普通用户,1为管理员):" PRI         if [ -z "$PRI" ];then             echo "请输入 0|1 "         elif [ ${PRI} -eq 0 ];then             sed -ri.bak "s/^(${USERR}.*) . (.)$/1 0 2/" auth.pass             echo "已将${USERR}用户设置为普通用户"         elif [ ${PRI} -eq 1 ];then             sed -ri.bak "s/^(${USERR}.*) . (.)$/1 1 2/" auth.pass             echo "已将${USERR}用户设置为管理员用户"         else             echo "请输入 0|1 "         fi     else         echo "您输入的用户名不存在"     fi }  # 管理员菜单 ADMIN_MENU(){     # 这里使用select循环,导致实现功能后不会自动打印菜单,需要回车后才能显示。     PS3="请输入(1-5,直接回车会重新打印菜单):"     select MENU in 创建新用户 删除旧用户 解锁用户 权限管理 退出;do     case $REPLY in     1)         NEW_USER         ;;     2)         DEL_USER         ;;     3)         UNLOCK_USER         ;;     4)         PRI_MAN         ;;     5)         exit         ;;     *)         echo "输入错误,请重新输入!"         ;;     esac     done }  # 新建文本文件 NEW_FILE(){     read -p "请输入要创建的文件名:" FILENAME     if [ -z ${FILENAME} ];then         echo "文件名不能为空!"     elif [ -d ${FILENAME} ];then         echo "${FILENAME}是一个目录"         if [ -f ${FILENAME}/${FILENAME} ];then             echo "文件已存在!"         else             touch ${FILENAME}/${FILENAME}             echo "${FILENAME}/${FILENAME}文本文件创建完成"         fi     elif [ -f ${FILENAME} ];then         echo "文件已存在!"     else         touch ${FILENAME}         echo "${FILENAME}文本文件创建完成"     fi }  # 新建目录 NEW_DIR(){     read -p "请输入要创建的目录名:" DIRNAME     if [ -z ${DIRNAME} ];then         echo "目录名不能为空!"     elif [ -d ${DIRNAME} ];then         echo "目录已存在!"     else         mkdir ${DIRNAME}         echo "${DIRNAME}目录创建完成"     fi }  # 统计文档信息 ARCHIVE_FILE(){     read -p "请输入要统计的文件名:" FILENAME     if [ -z ${FILENAME} ];then         echo "文件名不能为空!"     elif [ -f ${FILENAME} ];then         echo "${FILENAME}文件的行数为`wc -l ${FILENAME}|cut -d' ' -f1`"         echo "${FILENAME}文件的单词数为`wc -w ${FILENAME}|cut -d' ' -f1`"         echo "${FILENAME}文件的字符数为`wc -c ${FILENAME}|cut -d' ' -f1`"     else         echo "${FILENAME}文件不存在"     fi }  # 权限查看 PRI_VIEW(){     read -p "请输入要查看的文件名:" FILENAME     if [ -z ${FILENAME} ];then         echo "文件名不能为空!"     elif [ -f ${FILENAME} ];then         if [ -r ${FILENAME} -a -w ${FILENAME} -a -x ${FILENAME} ];then             echo "Readable & Writeable & Executable"         elif [ -r ${FILENAME} -a -x ${FILENAME} ];then             echo "Readable & Executable"         else             echo "其他权限"         fi     else         echo "${FILENAME}文件不存在"     fi }  # 普通用户菜单 USER_MENU(){     PS3="请输入(1-5,直接回车会重新打印菜单):"     select MENU in 新建文本文件 新建目录 统计文档信息 权限查看 退出;do     case $REPLY in     1)         NEW_FILE         ;;     2)         NEW_DIR         ;;     3)         ARCHIVE_FILE         ;;     4)         PRI_VIEW         ;;     5)         exit         ;;     *)         echo "输入错误,请重新输入!"         ;;     esac     done }  # 判断是否为管理员 ADMIN_JUDGE(){     if [ ${ADMIN} -eq 1 ];then         echo "当前角色为管理员"         ADMIN_MENU     elif [ ${ADMIN} -eq 0 ];then         echo "当前角色为普通用户"         USER_MENU     fi }  # 判断用户密码是否正确 PASSWD_JUDGE(){     if [ "${PASSWD}" = "${PASSWDR}" ];then         echo "登录成功!!!"         ADMIN_JUDGE     else         echo "密码或用户名错误"     fi }  # 判断用户账号是否锁定 LOCK_JUDGE(){     if [ ${LOCK} -eq 1 ];then         echo "${USER}用户已被锁定,请联系管理员!!!"         exit 1     elif [ ${LOCK} -eq 0 ];then         #echo "${USER}用户可以正常登录"         PASSWD_JUDGE     fi }  # 判断用户是否存在 EXIST_JUDGE(){     if [ -z ${USERR} ];then         echo "用户不存在,请先创建用户!"         exit 1     else         LOCK_JUDGE     fi }  # 密码数错三次后锁定账号 LOCK_USER(){     if [ "$USERR" = "admin" ];then         sed -ri.bak "s/^(${USERR}.* )0$/11/" auth.pass         echo "已锁定!!!"         chmod 0 Log_in.sh     else         sed -ri.bak "s/^(${USERR}.* )0$/11/" auth.pass         echo "${USERR}用户已被锁定,请联系管理员!!!"     fi }    ############################## 功能区 ###############################  i=0  read -p "请输入登录名:" USER  while ((i<3));do     read -sp "请输入密码:" PASSWD     echo      if [ -z $USER ];then         echo "请输入登录名!"         exit 1     fi      if [ -z $PASSWD ];then         echo "请输入密码!"         exit 1     fi      ARGS     EXIST_JUDGE      let i++ done  LOCK_USER  [root@waluna ~]#  

4 密码文件

[root@waluna ~]# cat auth.pass admin 123456 1 0 waluna waluna 0 0 [root@waluna ~]#  

5 说明

此脚本还存在一些问题,比如密码文件不提前创建会导致无法登录而报错;菜单使用select实现,不能自定义格式等。大家可以自行修改脚本,实现更完整的功能。


关于我
全网可搜《阿贤Linux》
CSDN、知乎、哔哩哔哩、博客园、51CTO、开源中国、思否、掘金、阿里云、腾讯云、华为云、今日头条、GitHub、个人博客