赞
踩
目录
- #!/bin/bash
-
- # 创建用户并设置密码的函数
- create_user() {
- local username=$1
- local password=$2
- if id "$username" &>/dev/null; then
- echo "用户 $username 已经存在。"
- else
- echo "正在创建用户 $username ..."
- useradd $username
- echo "$username:$password" | chpasswd
- echo "已为用户 $username 设置密码。"
- fi
- }
-
- # 读取输入信息
- echo "请输入要创建的用户列表,用逗号隔开:"
- read user_input
-
- # 检查用户输入是否为空
- if [ -z "$user_input" ]; then
- echo "输入错误,未提供任何用户名。"
- exit 1
- fi
-
- # 设置通用密码
- PASSWORD="xxxxxxxxxxxxxxx"
-
- # 分割输入的用户,并为每个用户调用创建函数
- IFS=',' read -ra USERS <<< "$user_input"
- for username in "${USERS[@]}"; do
- create_user "$username" "$PASSWORD"
- done
这个脚本提供了一个用户创建操作的自动化过程。下面是脚本主要部分的分析:
create_user
函数:
$1
(用户名) 和 $2
(密码)。local username=$1
和 local password=$2
定义了两个局部变量,这避免了在函数内部对全局变量进行操作。id "$username" &>/dev/null
这个命令检查系统中是否已存在用户名为$username
的用户。&>/dev/null
将命令的标准输出和错误输出都重定向到 /dev/null
(即丢弃这些输出)。if
条件为真),则打印存在信息。useradd
命令创建用户,然后通过管道将新密码传递给 chpasswd
命令来设置密码。脚本的剩余部分:
PASSWORD
存储通用密码 "xxxxxxxxxx"
。IFS=',' read -ra USERS <<< "$user_input"
将输入的用户列表字符串分隔成数组。IFS
(内部字段分隔符) 被临时设置成逗号 ,
,read -ra
读入输入到名为 USERS
的数组。for
循环遍历数组 USERS
中的每个用户名,并对每个用户名调用 create_user
函数来创建用户。总的来说,这个脚本的目的是自动化用户创建过程,通过一个通用密码为一系列新用户设置账户和密码。此脚本还可以进一步增强,例如添加密码复杂性检查、支持逐个指定密码或引入更优的错误处理机制等。
pwgen
命令来生成随机密码。确保您的系统中已安装 pwgen
。下面是优化后的脚本:
bash
- #!/bin/bash
-
- # 引入 pwgen 命令,用于生成随机密码
- if ! command -v pwgen &> /dev/null; then
- echo "pwgen 命令未找到,请先安装 pwgen。"
- exit 1
- fi
-
- # 创建用户并设置密码的函数
- create_user() {
- local username=$1
- local password=$2
- if id "$username" &>/dev/null; then
- echo "用户 $username 已经存在。"
- else
- echo "正在创建用户 $username ..."
- useradd $username
- echo "$username:$password" | chpasswd
- echo "已为用户 $username 设置密码。"
- fi
- }
-
- # 读取输入信息
- echo "请输入要创建的用户列表,用逗号隔开:"
- read user_input
-
- # 检查用户输入是否为空
- if [ -z "$user_input" ]; then
- echo "输入错误,未提供任何用户名。"
- exit 1
- fi
-
- # 请求用户输入密码
- echo "请输入用户密码(留空将自动生成8位的随机密码):"
- read -s user_password
-
- # 如果用户未输入密码,则生成8位随机密码
- if [ -z "$user_password" ]; then
- user_password=$(pwgen 8 1)
- echo "未提供密码,将为所有用户使用随机密码:$user_password"
- fi
-
- # 分割输入的用户,并为每个用户调用创建函数
- IFS=',' read -ra USERS <<< "$user_input"
- for username in "${USERS[@]}"; do
- create_user "$username" "$user_password"
- done
这个脚本包括了以下改进:
pwgen
生成随机密码,该工具需要预先安装。read -s
允许安静地(无回显)读取密码,提升安全性。包括手动输入密码、密码的验证、生成随机密码以及根据不同系统类型自动安装pwgen
工具的功能。
bash
- #!/bin/bash
-
- # 创建用户并设置密码的函数
- create_user() {
- local username=$1
- local password=$2
- if id "$username" &>/dev/null; then
- echo "用户 $username 已经存在。"
- else
- echo "正在创建用户 $username ..."
- useradd $username
- echo "$username:$password" | chpasswd
- echo "已为用户 $username 设置密码。"
- fi
- }
-
- # 确保 pwgen 工具已安装
- ensure_pwgen_installed() {
- if ! command -v pwgen &>/dev/null; then
- echo "pwgen 命令未找到,请先安装 pwgen。"
- # 判断系统类型并安装 pwgen
- local os_type=$(uname -s)
- case "$os_type" in
- Linux)
- if [ -f /etc/debian_version ]; then
- # 基于Debian的系统
- sudo apt-get update && sudo apt-get install -y pwgen
- elif [ -f /etc/redhat-release ]; then
- # 基于RedHat的系统
- sudo yum install -y pwgen
- else
- echo "未识别的 Linux 发行版。请手动安装 pwgen。"
- fi
- ;;
- Darwin)
- # macOS 系统
- brew install pwgen
- ;;
- *)
- echo "不支持的操作系统。请手动安装 pwgen。"
- ;;
- esac
- fi
- }
-
- # 生成随机密码的函数
- generate_random_password() {
- ensure_pwgen_installed
- pwgen 8 1
- }
-
- # 读取输入信息
- echo "请输入要创建的用户列表,用逗号隔开:"
- read user_input
-
- # 检查用户输入是否为空
- if [ -z "$user_input" ]; then
- echo "输入错误,未提供任何用户名。"
- exit 1
- fi
-
- # 获取密码
- echo "请输入要设置的密码(留空则为每个用户生成随机密码):"
- read -s user_password
-
- # 如果未输入密码则生成随机密码
- if [ -z "$user_password" ]; then
- echo "未输入密码,将为每个用户生成随机密码。"
- user_password=$(generate_random_password)
- fi
-
- # 分割输入的用户,并为每个用户调用创建函数
- IFS=',' read -ra USERS <<< "$user_input"
- for username in "${USERS[@]}"; do
- create_user "$username" "$user_password"
- done
请注意,为了自动安装pwgen
,该脚本需要运行管理权限,即可能需要用户在提示时输入密码。我为基于Debian和RedHat的Linux系统以及macOS系统添加了自动安装命令。如果用户的系统与这些不匹配或者不支持,那么会输出提示让用户手动安装pwgen
。在一些系统中,默认不包括pwgen
安装,因此需要先确保它已安装以便生成密码。
在运行此脚本之前,请确认你有足够的权限执行上述安装命令。毕竟,根据所处的系统环境和配置,可能需要调整此脚本以确保它能够正确执行。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。