【shell脚本】创建账户及删除账户,批量创建账户及批量删除账户===autoCreateUser.sh
一、字符串运算符
二、创建账户
1.提示用户输入用户名和密码,脚本自动创建相应的账户及配置密码。如果用户不输入账户名,则提示必须输入账户名并退出脚本;如果用户不输入密码,则统一使用默认的 123456 作为默认密码。
read命令参考网址:https://www.cnblogs.com/xiangzi888/archive/2012/03/27/2420084.html
[root@VM_0_10_centos shellScript]# vi autoCreateUser.sh
#!/bin/bash
# 编写脚本:提示用户输入用户名和密码,脚本自动创建相应的账户及配置密码。如果用户
# 不输入账户名,则提示必须输入账户名并退出脚本;如果用户不输入密码,则统一使用默
# 认的 123456 作为默认密码。
read -p "Please input a username:" username
# -z 判断一个变量是否为空。如果为空,提示用户必须输入账户名并退出脚本,退出码为2
# 没有输入账户名,退出后使用$?查看返回码为2
if [ -z $username ];
then
echo "您需要输入账户名"
exit 2
fi
# 使用stty -echo 关闭shell的回显功能(即在命令行输入的密码为不可见)
# 使用stty echo 打开shell的回显功能
stty -echo
read -p "Please input a password:" pass
stty echo
pass=${pass:-123456}
useradd "$username"
echo "$pass" | passwd --stdin "$username"
运行脚本之前先赋予执行的权限
chmod a+x 脚本名
2.使用 user.txt 文件中的人员名单,在计算机中自动创建对应的账户并配置初始密码本脚本执行,需要提前准备一个 user.txt 文件,该文件中包含有若干用户名信息
#!/bin/bash
# 使用 user.txt 文件中的账户,自动创建对应的账户并配置初始密码
# 本脚本执行,需提前准备一个 user.txt 文件,该文件中包含有若干用户名信息
for i in `cat user.txt`
do
useradd $i
echo "123456" | passwd ‐‐stdin $i
done
三、删除账户
使用命令删除账户(-r 连家目录一起删除)
[root@VM_0_10_centos ~]# userdel -r 账户名
# ==================================
# 删除账户及家目录
read -p "Please enter an account to delete:" username
if [ -z $username ];
then
echo "您需要输入删除的账户名"
exit 2
fi
userdel -r $username
echo "The user delete success!";
# ==================================
四、批量创建账户
通过将账户和密码写入一个txt文件,通过脚本读取创建文件中设置的账户和密码
txt文件不作解释,需要注意的一点是账户和密码之间是使用什么作为分隔符,脚本中则需要修改成对应的分隔符
[root@VM_0_10_centos shellScript]# cat createUsers.sh
#!/bin/bash
# 通过读取users.txt文件批量添加账户
echo $0=$0
echo $1=$1
if [ $# -eq 0 ];then
echo "[usage] 请输入批量创建的账户文件:./createUsers.sh users.txt"
exit 0
fi
# cat命令的输出作为read命令的输入,read读到的值放入line中
cat $1 | while read line
do
# echo $line(输出一行信息)
# awk -F " " 以空格分隔(如果txt中是:,则以:分隔)
username=$(echo $line | awk -F " " '{print $1}')
pass=$(echo $line | awk -F " " '{print $2}')
useradd $username
echo "$pass" | passwd --stdin "$username"
done
五、批量删除账户
通过将账户和密码写入一个txt文件,通过脚本读取创建文件中设置的账户并删除
[root@VM_0_10_centos shellScript]# cat delUsers.sh
#!/bin/bash
# 批量删除
echo $0=$0
echo $1=$1
if [ $# -eq 0 ];then
echo "[usage] 请输入批量创建的账户文件:./createUsers.sh users.txt"
exit 0
fi
# cat命令的输出作为read命令的输入,read读到的值放入line中
cat $1 | while read line
do
# echo $line
# awk -F " " 以空格分隔(如果txt中是:,则以:分隔)
username=$(echo $line | awk -F " " '{print $1}')
userdel -r $username
done
六、让用户输入需要创建的用户数量和用户名前缀,使用脚本自动创建
[root@rhel8 shell]# cat input_add_user.sh
#!/bin/bash
##########################################################################
# useradd #
# by author tanbaobao 2020/06/16 #
##########################################################################
# 从键盘输入
read -p "Please Input Number: " NUM
# 单个[]不支持正则表达式 ^[0-9]+$只匹配数字 ^0+$只匹配0 +表示一个或多个
if [[ ! "$NUM" =~ ^[0-9]+$ || "$NUM" =~ ^0+$ ]];then
echo -e "\033[32mError Number.\033[0m"
# exit
read -p "请重新输入【1-9】之间的数字: " NUM
fi
read -p "Please Input Prefix: " PREFIX
if [ -z "$PREFIX" ];then
echo -e "\033[32mError Prefix.\033[0m"
# exit
read -p "请重新输入一个字符串: " PREFIX
fi
for i in `seq $NUM`
do
USER=$PREFIX$i
useradd $USER
echo "123456" | passwd --stdin $USER &>/dev/null
if [ $? -eq 0 ];then
echo -e "\033[32m$USER Already Create.\033[0m"
fi
done
七、在上面脚本基础上加一个输入密码
[root@rhel8 shell]# cat input_user_pre_pass_num.sh
#!/bin/bash
##########################################################################
# useradd #
# by author tanbaobao 2020/06/22 #
##########################################################################
while :
do
# 从键盘读取
read -p "Please Enter prefix & password & num: [alice 12345 1]: " PREFIX PASS NUM
printf "user infomation:
------------------------------------------
user prefix: $PREFIX
user password: $PASS
user num: $NUM
------------------------------------------
"
read -p "Are You Sure?[y/n]: " ACTION
if [ "$ACTION" = "y" -o "$ACTION" = "Y" -o "$ACTION" = "yes" -o "$ACTION" = "YES" ];then
break
fi
done
for i in `seq -w $NUM`
do
USER=$PREFIX$i
id $USER &>/dev/null
if [ $? -eq 0 ];then
echo "user $USER already exists."
else
useradd $USER
echo "$PASS" | passwd --stdin $USER &>/dev/null
if [ $? -eq 0 ];then
echo "$USER is created."
fi
fi
done
八、上面脚本的综合效果
准备好一个用户和密码的文件
[root@rhel8 shell]# cat users_pass.txt
aa01 000000
cc02 222222
vv03 adminuser
[root@rhel8 shell]# cat read_txt_create_user.sh
#!/bin/bash
##########################################################################
# useradd #
# by author tanbaobao 2020/06/22 #
##########################################################################
if [ $# -eq 0 ];then
echo "Usage: `basename $0` file.txt|user"
exit 1
fi
if [ ! -f $1 ];then
id $1 &>/dev/null
if [ $? -eq 0 ];then
echo "user $1 already exists."
else
useradd $1
read -p "Please set the user $1 password: " INP_PASS
echo "$INP_PASS" | passwd --stdin $1 &>/dev/null
if [ $? -eq 0 ];then
echo "$1 is created."
fi
fi
else
cat $1 | while read line
do
# 判断文件中出现的空行问题(${#line}表示line的长度)
# break表示跳出循环,后面的不会再执行
# continue表示中止本次循环,执行下次循环
if [ ${#line} -eq 0 ];then
continue
fi
# 这里如果需要考虑分隔符则需要用到-F参数
USER=`echo "$line" |awk -F" " '{print $1}'`
PASS=`echo "$line" |awk -F" " '{print $2}'`
echo "line: " $line
echo "user: " $USER
echo "pass: " $PASS
id $USER &>/dev/null
if [ $? -eq 0 ];then
echo "user $USER already exists."
else
useradd $USER
echo "$PASS" | passwd --stdin $USER &>/dev/null
if [ $? -eq 0 ];then
echo "$USER is created."
fi
fi
done
fi
注意:for循环默认按空格分隔,处理文件一般不用for循环,如果需要用到其他分隔符分隔需要重新定义分隔符
# 内部字段分隔符
# 需要放在for循环之前
# 第一种
IFS=$'\n'
# 第二种(直接回车)
IFS='
'
不幸运的人也有被眷顾的权利