一、字符串运算符
二、创建账户
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=' '