【问题标题】:Add new users from a text file in bash script从 bash 脚本中的文本文件添加新用户
【发布时间】:2013-03-13 18:31:08
【问题描述】:

我是脚本新手,我不确定我的问题是什么。我还没有添加 groupadd 或 useradd 命令来实际添加用户,但是一旦我让这部分工作,我会的。到目前为止,我有:

!#/bin/bash

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

first=cut -f 1 -d ',' user_list
last=cut -f 2 -d ',' user_list
lastl=cut -f 2 -d ',' user_list | head -c 1

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

输出应该看起来像adding Jet Black: jetb,但它到处都是。关于我做错了什么的任何帮助或提示都会有很大帮助。

【问题讨论】:

  • 你的语法几乎有一半是错误的。

标签: linux bash


【解决方案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:] 等)、捕获命令的输出 ($(...))。

【讨论】:

  • 谢谢 我不知道 IFS。我已经阅读了一段时间,它真的很有帮助。
【解决方案2】:

这是您脚本的语法正确版本:

#!/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

我认为您想删除$usern$first$lastl 之间的空格,如下所示:

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

然后还有很多改进要做,可能就像twalberg said,但我认为最好的第一步是了解你的语法错误。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-10-22
    • 2021-11-15
    • 1970-01-01
    • 2014-09-04
    • 2019-05-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多