【发布时间】:2015-05-11 12:06:05
【问题描述】:
此脚本采用一个包含四列的 .txt 文件(其中包含 LastName FirstName MiddleInitial Group)作为参数,并且需要为每个人创建一个唯一的用户名和密码;然后根据每个用户的组分配适当的目录:即如果“John Doe”在“mgmt”组中,并且他的用户名是 jdoe1234,那么他的目录将是 /home/mgmt/jdoe1234。然后它应该生成一个 .txt 文件,其中包含以下列- LastName FirstName UID(userid) Password- 。
我有以下几点:
#!/bin/bash
IFS=$'\n';
for i in `cat $1`;
do
last=`echo $i|cut -f 1 -d ' '`;
first=`echo $i|cut -f 2 -d ' '`;
middle=`echo $i|cut -f 3 -d ' '`;
groups=`echo $i|cut -f 4 -d ' '`;
r=$(( $RANDOM % 10 ));
s=$(( $RANDOM % 10 ));
y=$(( $RANDOM % 10 ));
username=`echo $first| head -c 1 && echo $last| head -c 3 && echo $r$s$y`
echo $username
done
#check if group exists, if not then create one
for group in ${groups[*]}
do
grep -q "^$group" /etc/group ; let x=$?
if [ $x -eq 1 ]
then
groupadd "$group"
fi
done
#try to add user to correct group
x=0
created=0
for user in ${username[*]}
do
useradd -n -g "{groups[$x]}" -m $user 2> /dev/null
done
我希望用户名包含:firstName 的第一个字母、lastName 的前 3 个字母、中间的首字母,然后是 3 个随机生成的数字。因此,与上面的 John Doe 示例并不完全相同,但相似。它不能超过 8 个字符。我不确定我是否正确创建了用户名。
当然,我也遇到了密码问题;不确定是否需要在用户名旁边或之后创建。
在第一个“for 循环”之后,我首先尝试添加一个不存在的组,然后尝试将用户名放入正确的组中。我从 Youtube 视频中获得了语法,但他将其作为数组使用,我不确定我是否这样做。
如果有帮助,假设 .txt 文件包含:
doe john a mgmt
lee amy f temp
smith tracy s empl
如果您有时间,我们将不胜感激。谢谢。
【问题讨论】:
-
要求人们有一个中间的首字母是非常愚蠢的失礼。如果你有很多空闲时间,kalzumeus.com/2010/06/17/…有更详细的讨论。
-
将组放在一个数组中表明可以有多个组,但您的其他要求似乎基于每个用户一个组。是哪条路?