首页 > 系统相关 >Shell编程完成用户注册登录

Shell编程完成用户注册登录

时间:2024-05-24 22:59:50浏览次数:23  
标签:username Shell return 用户注册 编程 echo password email cmatrix

目录

需求

1. menu 界面

welcome

(1)注册用户

(2)用户登录

(3)退出

2. 注册用户(

1)用户名(首字母大写)

(2)密码(8 位及其以上 必须有三个字符其中一个以上如: & $ _ 隐试密码)

(3)手机号码(必须以 139 开头)

(4)邮箱 邮箱名数字开头@qq.com

(5)检测是否重名,重手机号和邮箱

(6)不重名、手机号、邮箱写入 /etc/secfinfo

3. 用户登录

(1)输入用户名

(2)密码

(3)邮箱

(4)查用户是否存在,密码邮箱是否正确

(5)执行屏保(代码雨)

屏保(代码雨的安装)

1.安装依赖包

2、下载 cmatrix 源代码编辑

3.编译和安装 cmatrix

4.将 cmatrix 命令添加到 PATH编辑

5.使用 cmatrix

实验测试

1.menu 界面编辑

2.选 1 进行注册名字(首字母必须大写)

​3.密码必须 8 位数以上并且至少有一个字符,密码隐试(这里密码设置为:1234567&)手机号必须 139 开头且邮箱为数字开头@qq.com

4.选 2 进行用户登录输入用户名字密码和邮箱(AJ,1234567&,[email protected]

​5.登陆成功后会出现屏保(代码雨)

6. 选 3 退出

​7. vim /etc/secfinfo 查看注册的用户


需求

1. menu 界面
welcome
(1)注册用户
(2)用户登录
(3)退出
2. 注册用户
(1)用户名(首字母大写)
(2)密码(8 位及其以上 必须有三个字符其中一个
以上如: & $ _ 隐试密码)
(3)手机号码(必须以 139 开头)
(4)邮箱 邮箱名数字开头@qq.com
(5)检测是否重名,重手机号和邮箱
(6)不重名、手机号、邮箱写入 /etc/secfinfo
3. 用户登录
(1)输入用户名
(2)密码
(3)邮箱

(4)查用户是否存在,密码邮箱是否正确
(5)执行屏保(代码雨)

#! /bin/bash
USER_INFO_FILE="/etc/setfinfo"
# 验证用户名(首字母大写)
function validate_username() {
local username=$1
if ! [[ $username =~ ^[A-Z][a-zA-Z0-9_]{0,16}$ ]];
then
echo "首字母需要大写"
return 1
fi
return 0
}
# 验证密码(至少 8 个字符,且包含特殊字符)
function validate_password() {
local password=$1
if [[ ${#password} -lt 8 ]]; then
echo "Invalid password. It should be at least 8
characters long."
return 1
fi
if ! [[ ${#password} -ge 8 && $(echo "$password" |
grep -E '[&\$\\_]') ]]; then
echo "并且必须包含至少一个 &、$ 或 _ 符号,请重新输入。
"
return 1
fi
return 0
}
# 验证手机号(假设为中国手机号,139 开头)
function validate_phone_number() {
local phone_number=$1
if ! [[ $phone_number =~ ^139[0-9]{8}$ ]]; then
echo "手机号需要 139 开头"
return 1
fi
return 0
}
# 验证邮箱地址([email protected])
function validate_email() {
local email=$1
if ! [[ $email =~ ^[0-9][a-zA-Z0-9._%+-][email protected] ]];
then
echo "Invalid email address."
return 1
fi
return 0
}
# 检查用户名是否已存在
check_duplicate_username() {
local username=$1
if grep -q "^$username:" "$USER_INFO_FILE"; then
echo "Username already exists."
return 0
fi
return 1
}
# 检查手机号是否已存在
check_duplicate_phone_number() {
local phone_number=$1
if grep -q ":$phone_number:" "$USER_INFO_FILE"; then
echo "Phone number already exists."
return 0
fi
return 1
}
# 检查邮箱是否已存在
check_duplicate_email() {
local email=$1
if grep -q ":$email" "$USER_INFO_FILE"; then
echo "Email address already exists."
return 0
fi
return 1
}
# 用户注册函数
register_user() {
local username password phone_number email
read -p "Enter username: " username
if ! validate_username "$username"; then return; fi
if check_duplicate_username "$username"; then
return; fi
read -s -p "Enter password: " password
echo
if ! validate_password "$password"; then return; fi
read -p "Enter phone number: " phone_number
if ! validate_phone_number "$phone_number"; then
return; fi
if check_duplicate_phone_number "$phone_number";
then return; fi
read -p "Enter email address: " email
if ! validate_email "$email"; then return; fi
if check_duplicate_email "$email"; then return; fi
# 写入用户信息到文件
# echo
"$username:$password_hash:$phone_number:$email" >>
"$USER_INFO_FILE"
echo "$username:$password:$phone_number:$email" >>
"$USER_INFO_FILE"
echo "User registration successful!"
}
#用户登录
login_user() {
local username password email input_password
read -p "Enter username: " username
if ! grep -q "^$username:" "$USER_INFO_FILE"; then
echo "用户不存在"
return 1
fi
read -s -p "Enter password: " input_password
echo ""
read -p "Enter email address: " email
# if ! grep -q "^$username:" "$USER_INFO_FILE"; then
# echo "User does not exist."
# return 1
# fi
password=$(awk -v username="$username" -F:
'$1==username {print $2}' "$USER_INFO_FILE")
if [[ "$password" != "$input_password" ]]; then
echo "Incorrect password."
return 1
fi
registered_email=$(awk -v username="$username" -F:
'$1==username {print $4}' "$USER_INFO_FILE")
if [[ "$registered_email" != "$email" ]]; then
echo "Incorrect email address."
return 1
fi
echo "登录成功."
cmatrix
}
show_menu() {
clear
echo "User Management System"
echo "1. 注册用户"
echo "2. 登录用户"
echo "3. 退出"
read -p "Enter your choice [1-3]: " choice
}
# 主程序
while true; do
show_menu
case $choice in
1)
register_user
;;
2)
login_user
;;
3)
echo "Exiting..."
exit 0
;;
*)
echo "Invalid choice. Please try again."
;;
esac
read -p "Press Enter to continue..." -n 1 -s
echo
done

屏保(代码雨的安装)

1.安装依赖包

在编译 cmatrix 之前,你需要安装一些必要的依赖包,如 ncurses
和 gcc 。 使 用 以 下 命 令 安 装 这 些 依 赖 : sudo yum install -y
ncurses-devel gcc

2、下载 cmatrix 源代码

你可以从 SourceForge 网站下载 cmatrix 的源代码包。使用 wget 命令下载最
新版本的 cmatrix:

wget -q https://jaist.dl.sourceforge.net/project/cmatrix/cmatrix/1.2a/cmatrix-1.2a.tar.gz 


并解压缩源代码包
下载完成后,解压缩源代码包:
 

tar -zxvf cmatrix-1.2a.tar.gz


3.编译和安装 cmatrix

进入解压缩后的目录,并开始编译和安装过程:

cd cmatrix-1.2a/
./configure --prefix=/opt/cmatrix
make
sudo make install

4.将 cmatrix 命令添加到 PATH

为了方便使用,你可以将 cmatrix 的安装目录添加到你的 PATH 环境变量中:
 

echo 'export PATH=/opt/cmatrix/bin:$PATH' >> ~/.bashrc
source ~/.bashrc


5.使用 cmatrix

安装完成后,你可以通过简单地输入 cmatrix 来运行程序:

cmatrix

实验测试
1.menu 界面


2.选 1 进行注册名字(首字母必须大写)


3.密码必须 8 位数以上并且至少有一个字符,密码隐试(这里密码设置为:1234567&)
手机号必须 139 开头且邮箱为数字开头@qq.com

4.选 2 进行用户登录输入用户名字密码和邮箱(AJ,1234567&,[email protected]


5.登陆成功后会出现屏保(代码雨)

6. 选 3 退出


7. vim /etc/secfinfo 查看注册的用户

标签:username,Shell,return,用户注册,编程,echo,password,email,cmatrix
From: https://blog.csdn.net/weixin_74166037/article/details/139186004

相关文章

  • 分布式计算编程项目二
    利用RPC技术实现一个学生信息管理系统目录利用RPC技术实现一个学生信息管理系统一、具体要求二、相关理论理论迭代1.单机结构2.集群结构3.微服务结构微服务介绍RPC介绍使用到的相关包MySQL启动方法三、代码架构四、功能实现+界面展示基本功能:技术点:1.查询速度提高2.数据模型和......
  • WinSock 的多线程编程
    目录概述Winsock为什么需要多线程阻塞模式和非阻塞模式单线程和多线程的优缺点Win32系统下的多进程多线程机制进程和线程线程创建线程同步线程通信  VC++对多线程网络编程的支持MFC中的多线程支持ATL中的多线程支持多线程FTP客户端实例头文件包含线......
  • PowerShell 命令 Get-NetConnectionProfile 来查看当前网络连接的类型。命令会列出当
    PowerShell命令Get-NetConnectionProfile来查看当前网络连接的类型。在PowerShell中执行以下命令:powershellCopyCodeGet-NetConnectionProfile这个命令会列出当前计算机上所有网络连接的详细信息,包括连接名称、接入类型(例如“域网络”、“专用网络”、“公用网络”)等。在......
  • 实验5 C语言指针应用编程
    1.实验任务1task1_1.c1#include<stdio.h>2#defineN534voidinput(intx[],intn);5voidoutput(intx[],intn);6voidfind_min_max(intx[],intn,int*pmin,int*pmax);78intmain()9{10inta[N];11intmin,max;1213......
  • 【shell 】syntax error in conditional expression
    【shell】syntaxerrorinconditionalexpressionweixin_34050427于2016-04-1510:04:53发布阅读量3.6k 收藏 2点赞数1文章标签: shell版权编写shell脚本时遇见syntaxerrorinconditionalexpression错误,#!/bin/bash#cleanup/var/log/message......
  • Shell-单引号和双引号的区别
    在shell脚本中,单引号(')和双引号(")都用于文本引用,但它们之间有一些区别:双引号[1] 当要引用一个变量的值时,一般推荐使用双引号。[2] 使用双引号除了变量名前缀($)、后引符(`)和转义符(\)外,会使shell不再解释引号中其它所有的特殊字符。[3] 用双引号时$仍被当成特殊字符,允许......
  • Python并发与异步编程
    Python的并发与异步编程是两个不同的概念,但它们经常一起使用,以提高程序的性能和响应能力。以下是对这两个概念的详细讲解:并发编程(Concurrency)并发编程是指在程序中同时执行多个任务的能力。Python提供了几种实现并发的机制:1.多线程(Threading):  -Python的`thread......
  • 面向对象编程思想杂谈
    最近在写一篇编程语言发展历史相关的书。正好在书中聊到了面向对象思想,摘录一些内容,跟大家分享。什么是OOP?面向对象编程(Object-OrientedProgramming,OOP)自上世纪80年代兴起以来,便以其独特的理念和强大的抽象能力,成为软件工程领域的主流编程范式。面向对象编程通过引入类......
  • 数据库SQL语言基础编程
    目录一、简单查询查询员工表与部门表的笛卡尔积在上述操作的基础上完成连接的选择操作和投影操作对查询数据进行排序操作查询工资超过2500的员工基本信息查询月总收入超过2500的员工基本信息查询工资超过2500的员工的姓名及其所在部门名称查询所有员工的工资、奖金、总......
  • Java并发编程之newFixedThreadPool线程池
    随着计算机硬件性能的不断提升,多核CPU的普及,现代计算机系统的性能越来越强大。在这样的环境下,如何更好地利用计算机系统的性能优势,提高程序的运行效率,是每一个Java开发者需要思考的问题。Java中提供了多线程编程的支持,但是在多线程编程中,线程的创建、启动、调度等都需要耗费一定的......