2013-03-13 99 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,但我认为你最好的第一步是理解你的语法错误。