2016-03-07 115 views
0

我正在编写我的第一个bash脚本,以循环使用旧用户名到新用户名的CSV。我只读了新的用户名,使Linux帐户Bash脚本if

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

我该如何解决这个问题?

+2

http://unix.stackexchange.com/q/28526/67817 –

回答

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 

正如在评论中提到,你可能不得不求助于您原始方法将$new_user转换为小写,如果您使用的是旧版本的bash(${var,,}语法是bash 4功能)。如果您使用[:upper:][:lower:]而不是[A-Z][a-z]那么您的脚本将更少特定于语言环境,这可能需要注意。

+0

谢谢汤姆。我将在明天测试我的测试环境。 – mrdennis86

+1

'$ {new_name ,,}'需要'bash' 4,不过。早期版本将不得不使用'new_name = $(tr [:upper:] [:lower:] <<<“$ new_name”)''。 – chepner

+0

谢谢你们,现在工作正常! – mrdennis86