我正在编写我的第一个bash脚本,以循环使用旧用户名的CSV到新用户名。我只读了新的用户名来制作linux帐号
while read old_name new_name
do
new_name="$(tr [A-Z] [a-z] <<< $new_name)"
echo $new_name
cmd= useradd -g groupid -s /bin/ksh $new_name >> $LOGFILE 2>&1
echo password | passwd --stdin $new_name
但是有些用户已经存在并且不需要新密码。只有新用户需要密码。
当用户已经存在时,我会获得useradd: user 'username' already exists
我该如何解决这个问题?
答案 0 :(得分:2)
链接的问题包括如何确定用户是否已经存在,但我建议对您的脚本进行其他一些修改:
# always use -r (raw) switch unless you have a specific reason not to
while read -r old_name new_name
do
new_name=${new_name,,} # convert to lowercase using parameter expansion
if ! id -u "$new_name" &>/dev/null # check user doesn't exist
then
useradd -g groupid -s /bin/ksh "$new_name" &>"$LOGFILE"
passwd --stdin "$new_name" <<<password # avoid useless echo + pipe
fi
done
如评论中所述,如果您使用旧版本的bash,则可能需要使用原始方法将$new_user
转换为小写(${var,,}
语法是bash 4功能)。如果您使用[:upper:]
和[:lower:]
代替[A-Z]
和[a-z]
,那么您的脚本将更少地针对特定于区域设置,这可能需要注意。