2016-03-07 69 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