Bash脚本if else

时间:2016-03-07 10:39:16

标签: bash shell if-statement

我正在编写我的第一个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

我该如何解决这个问题?

1 个答案:

答案 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],那么您的脚本将更少地针对特定于区域设置,这可能需要注意。