青碧 发表于 2023-8-22 23:45:13

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

目录

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

[*]1 系统要求
[*]2 脚本执行效果

[*]2.1 管理员登录效果
[*]2.2 普通用户登录效果
[*]2.3 密码文件格式

[*]3 实现脚本
[*]4 密码文件
[*]5 说明


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

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


2 脚本执行效果

2.1 管理员登录效果


2.2 普通用户登录效果


2.3 密码文件格式

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

3 实现脚本

# 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=0read -p "请输入登录名:" USERwhile ((i
页: [1]
查看完整版本: 模拟Linux文件管理员系统-shell实现