目录
cmatrix文件
链接:https://pan.baidu.com/s/1ewMEX8Ru5TjC_adNYGD8vA?pwd=kmmv
提取码:kmmv
一、用户注册功能
用户名检查:在添加新用户之前,需要检查用户名是否已存在。如果用户名已存在,应提示用户重新输入。(首字母大写)
密码确认:在用户输入密码后,应要求用户再次输入以确认密码。如果两次输入的密码不一致,应提示用户重新输入。(8个字符及以上其中要包括&、$、_ 至少一个特殊字符)
用户手机号码:139数字开头不超过11位数
用户邮箱:qq.com
用户信息存储:将用户注册的信息(用户名和密码)存储到文件中,以便后续的登录验证。
二、步骤
- 创建一个用户登录文件
- 创建一个文件存储用户信息
- 创建一个文件保存登录信息
vi login.txt
- 按i写入代码
- 给脚本添加可执行权限
chmod +x users.sh
- 检查脚本是否可以执行
./users.sh
三、代码
#!/bin/bash
register() {
read -p "请输入用户名(必须以大写字母开头): " username
# 检查用户名是否已存在
if grep -q "^$username:" users.txt; then
echo -e "\n用户名 '$username' 已存在,请选择其他用户名。\n"
return 1
fi
while ! [[ $username =~ ^[A-Z][a-zA-Z0-9_]{2,}$ ]]; do
read -p "无效的用户名格式。请输入以大写字母开头的用户名: " username
done
read -sp "请输入密码(至少8个字符,并且包含'&', '$', '_'中的至少一个): " password
echo " "
if [[ ${#password} -lt 8 || ! $password =~ [\&\$\_] ]]; then
read -sp "密码至少为8个字符,并且必须包含'&', '$', '_'中的至少一个,请重新输入密码: " password
echo " "
fi
read -p "请输入手机号码(必须以139开头): " phone
while ! [[ $phone =~ ^139[0-9]{8}$ ]]; do
read -p "无效的手机号码。请输入以139开头的手机号码: " phone
done
read -p "请输入电子邮件地址(必须以数字开头,并以 @qq.com 结尾): " email
while ! [[ $email =~ ^[0-9].*@qq.com$ ]]; do
read -p "无效的电子邮件地址。请输入以数字开头,并以 @qq.com 结尾的电子邮件地址: " email
done
read -p "请输入手机号码(必须以139开头): " phone
while ! [[ $phone =~ ^139[0-9]{8}$ ]]; do
read -p "无效的手机号码。请输入以139开头的手机号码: " phone
done
echo "$username:$password" >> login.txt
echo "$username:$password:$phone:$email" >> users.txt
echo -e "\n用户注册成功!\n"
}
login() {
read -p "请输入用户名: " username
if grep -q -v "^$username:" login.txt; then
echo -e "\n用户名 '$username' 不存在,请选择其他用户名。\n"
exit 1
fi
read -sp "请输入密码: " password
while IFS=":" read -r stored_user stored_pass ; do
if [[ $username == "$stored_user" && $password == "$stored_pass" ]]; then
echo -e "\n登录成功!欢迎,$username!\n "
cmatrix
return 0
fi
done < "login.txt"
echo -e "\n登录失败。用户名、密码不匹配。\n"
return 1
}
while true; do
clear
echo -e "欢迎\n"
echo "1. 注册"
echo "2. 登录"
echo "3. 退出"
read -p "请输入您的选择: " choice
case $choice in
1)
register
;;
2)
login
;;
3)
echo -e "\n退出中..."
exit 0
;;
*)
echo -e "\n无效的选择。请输入1到3之间的数字。\n"
;;
esac
read -n1 -r -p "按任意键继续..."
done
四、实验测试
正确测试
正常注册用户
正常登录用户
重点错误测试
- 注册已存在用户名
- 输入首字母不是大写的用户名
- 输入密码少于8位数或者不包含$&_特殊字符
- 输入手机号开头不是139
- 登录错误的用户名
- 使用错误密码登录
五、使用cmatrix美化登录页面
cmatrix 是一个在命令行终端中显示字符动画效果的程序,它模仿了电影《黑客帝国》中的数字雨效果。这个程序通常用于在演示或等待长时间运行的任务完成时提供视觉效果。
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
3、解压缩源代码包
下载完成后,解压缩源代码包:
tar -zxvf cmatrix-1.2a.tar.gz
4、编译和安装 cmatrix
进入解压缩后的目录,并开始编译和安装过程:
cd cmatrix-1.2a/./configure --prefix=/opt/cmatrixmake
sudo make install
5、检查 cmatrix 版本
安装完成后,你可以通过以下命令检查 cmatrix 的版本:
/opt/cmatrix/bin/cmatrix -V
6、将 cmatrix 命令添加到 PATH
为了方便使用,你可以将 cmatrix 的安装目录添加到你的 PATH 环境变量中:
echo 'export PATH=/opt/cmatrix/bin:$PATH' >> ~/.bashrc
source ~/.bashrc
7、使用 cmatrix
安装完成后,你可以通过简单地输入 cmatrix 来运行程序:
cmatrix
这将启动数字雨动画,并在终端窗口中显示。cmatrix 的一些常见选项包括:
--no-colors:不使用颜色。
--no-rain:不显示雨效果。
--matrix:显示一个静态的字符矩阵而不是动画。
--display-time:设置字符在屏幕上显示的时间(以百分之一秒为单位)。
--speed:设置动画的速度。
例如,如果你想以较快的速度运行 cmatrix,可以使用以下命令:
cmatrix --speed 1
8、停止 cmatrix
要停止 cmatrix 动画,可以按 q 键或使用鼠标点击终端窗口关闭
六、实验总结
实验成果
用户注册功能实现:
实现了用户名检查,确保用户名唯一性。
实现了密码确认机制,确保用户两次输入的密码一致。
实现了用户手机号码和邮箱格式的简单验证(尽管对于邮箱的要求仅提到了qq.com,但理论上应支持更广泛的邮箱格式)。
用户注册信息被成功存储到文件中,为后续的登录验证提供了数据基础。
用户登录功能实现:
实现了输入验证,确保用户输入的用户名和密码满足特定要求。
实现了用户验证机制,通过与存储的文件中的信息进行比对来验证用户身份。
实现了错误处理机制,能够根据不同错误类型给出相应的提示信息。
其他功能实现:
提供了简单的用户界面,引导用户进行注册和登录操作。
实现了日志记录功能,便于跟踪和调试问题。
考虑了系统安全性,虽然未直接说明,但假设在存储密码时使用了加密处理(如哈希函数)。
实验讨论
系统安全性:
在实际系统中,密码不应以明文形式存储,而应当使用哈希函数(如SHA-256、bcrypt等)进行加密处理后再存储。
对于密码的验证,也应对用户输入的密码进行哈希处理后再与存储的哈希值进行比对。
可以考虑使用“盐值”(salt)来增加哈希的安全性。
用户体验:
可以进一步优化用户界面,使其更加友好和直观。
可以添加更多的错误提示和帮助信息,以便用户更容易理解和操作。
功能扩展:
可以考虑添加账户锁定机制,以增加系统的安全性。
可以添加用户权限管理功能,以支持不同用户拥有不同的操作权限。
可以考虑与数据库进行集成,以便更方便地管理用户信息。
代码优化:
应对代码进行充分的测试,确保在各种情况下都能正确运行。
可以使用shell脚本的调试工具(如set -x)来辅助调试过程。
应遵循一定的编程规范,以提高代码的可读性和可维护性。
日志管理:
可以考虑使用专门的日志管理系统或工具来管理日志,以便更方便地查看和分析日志信息。
可以对日志进行定期备份和归档,以防止数据丢失。
通过本次实验,您应该已经对shell脚本编程有了更深入的了解,并掌握了基本的用户注册和登录系统的实现方法。希望这些成果和讨论能够对您有所帮助!