2013-03-13 84 views
0

我是腳本編寫新手,我不確定我的問題。我還沒有添加groupadd或useradd命令來實際添加用戶,但是我將一旦得到這部分工作。到目前爲止,我有從bash腳本的文本文件中添加新用戶

#/斌/慶典

如果[$#-ne 0]
然後
回聲「用法:$ 0 <文件」
1號出口
網絡

第一= cut -f 1 -d ',' user_list
最後= cut -f 2 -d ',' user_list
lastl cut -f 2 -d ',' user_list | head -c 1

用戶N = $first $lastl | tr 'A-Z' 'a-z'
TNAME = $first $last
而讀取線;做
回聲 「並稱$ TNAME:$用戶N \ N」
做< USER_TEXT

輸出應該看起來像adding Jet Black: jetb但同類所有的地方的。任何幫助或暗示,我做錯了什麼會有很大幫助。

+1

你的語法在差不多一半的行上是錯誤的。 – jordanm 2013-03-13 19:01:17

回答

1

你也許可以讓它變得簡單許多通過閱讀上來就IFS變量的分詞中的作用,然後寫是這樣的:在那裏研究

while IFS=, read first last 
do 
    usern=$(echo "${first}${last:0:1}" | tr [:upper:] [:lower:]) 
    tname="${first} ${last}" 
    echo "adding ${tname} : ${usern}" 
done 

一些其他的東西 - 串擴張( (${last:0:1}),tr[:upper:]等)的字符類別,捕捉來自命令($(...))的輸出。

+0

謝謝我不知道IFS。我一直在閱讀它一段時間,它真的很有幫助。 – user2163296 2013-03-13 20:42:36

0

這是你的腳本語法正確的版本:

#!/bin/bash 

if [ $# -ne 0 ] 
then 
     echo "usage: $0 < file" 
     exit 1 
fi 

while read user_list 
do 
     first=`echo $user_list | cut -f 1 -d ','` 
     last=`echo $user_list | cut -f 2 -d ','` 
     lastl=`echo $last | head -c 1` 

     usern=`echo $first $lastl | tr 'A-Z' 'a-z'` 
     tname=`echo $first $last` 
     echo "adding $tname : $usern\n" 
done < user_text 

我想你想刪除$first$lastl之間的空間$usern,像這樣:

usern=`echo ${first}${lastl} | tr 'A-Z' 'a-z'` 

再就是很多改進措施可能像twalberg said,但我認爲你最好的第一步是理解你的語法錯誤。