跳转至

55. 脚本:批量创建特殊要求用户

3. 批量创建特殊要求用户

批量创建10个系统账号oldboy01-10并设置密码(密码要求字符数字等混合)

此题重点:必须要,经常考,要给出2种以上方法

思路分析

1) 01..10产生方法
    echo {01..10}
    seq -w 10
2) 随机数
    openssl rand -base64 100
3) 创建用户
    useradd oldboy01
4) 设置密码
    echo 密码|passwd --stdin
方法2:
    chpasswd oldboy01:passwd

脚本

#!/bin/bash
for n in {01..10}
do
    pass=`openssl rand -base64 10`
    useradd oldboy$n
    echo $pass|passwd --stdin oldboy$n
    echo -e "oldboy$n\t$pass" >>/tmp/user.list
done

方法2

#!/bin/bash
for n in `seq -w 1 10`
do
    pass=`openssl rand -base64 10`
    useradd oldboy$n
    echo "oldboy$n:$pass" >> /tmp/chpasswd.log
done
chpasswd < /tmp/chpasswd.log

改进:加上root用户验证

#!/bin/bash
. /etc/init.d/functions

if [ $UID -ne 0 ];then
    echo "必须使用root用户执行本脚本!!!"
    exit 1
fi

for n in {20..30}
do
    pass=`openssl rand -base64 10`
    if [ `grep -w "oldboy$n" /etc/passwd|wc -l` -eq 0 ];then
        useradd oldboy$n &>/dev/null
        echo $pass|passwd --stdin oldboy$n &>/dev/null && \
        echo -e "oldboy$n\t$pass" >>/tmp/user.list && \
        action "oldboy$n is ok." /bin/true
    else
        action "oldboy$n is fail." /bin/false
    fi
done

3.1 批量创建10个用户stu01-stu10,设置随机8为密码,要求只能用linux命令及管道实现,不能用循环

方法1:(以下方法都未验证。。。)

echo stu{01..10}|tr " " "\n" |sed -r 's#(.*)#useradd \1;
pass=$((RANDOM+10000000));echo "$pass|passwd --stdin \1;echo -e "\1\t`echo "$pass"`">>/tmp/lodboy.log#g'|bash

拆解如下

useradd stu01;
pass=$((RANDOM+10000000));
echo "$pass"|passwd --stdin stu01;
echo -e "stu01 `echo "$pass"`">>/tmp/oldboy.log

方法2

echo stu{11..12}|xargs -n1 useradd;echo stu{11..12}:`cat /dev/urandom|tr -dc 0-9|fold -w8|head -1`|xargs -n1 |tee -a pass.txt|chpasswd

方法3

echo stu{21..30}|tr "" "\n"|sed -e 's/^/useradd /' -e 's/\(stu[0-9]\{2\}\)$/\1 \&\& echo "\1:`echo $[$RANDOM**3]|cut -c1-8`"|tee -a userinfo.txt|cut -d: -f2|passwd --stdin \1/' |bash

方法4

echo stu{01..10}|tr ' ' '\n'|sed -rn 's@^(.*)$@useradd\1;echo $RANDOM |md5sum|cut -c 1-8 >/data/\1;cut /data/\1|passwd --stdin \1@gp'|bash

最后更新: 2022-02-19 13:59:07