脚本编程

巧用echo命令解决Samba批量添加用户难题

Jager · 6月25日 · 2016年 · 5767次已读

最近实在太忙,没时间研究和折腾,所以也没有什么可以分享到博客的。果然,个人博客坚持原创太不不容易了。张戈博客上线 2 年多,从 1 天多更,到一天 1 更、一周一更,直到现在 2 星期可能有一更的节奏。。。

好了,废话不说了。翻了翻在工作上的印象笔记,发现还是有一些存货可以分享的。

挺久之前,组内新申请了一批开发测试机,需要部署环境。除了一些常见的软件要安装之外,还有一个我之前很少用到的 Samba。

Samba 的专业解释我就不贴了,百度百科啥的都有。说白了就是 Samba 安装到 Linux 服务器上之后,就可以将服务器上的目录映射到 Windows、MAC 等个人电脑上,类似于 Windows 的文件共享,使用相当方便,因此,Samba 成了组内开发同事的刚需软件。。。(其实对于使用云服务器的站长,Samba 可比 FTP 好用多了,直接本地开发编辑。。。这个后面有空再介绍吧)巧用echo命令解决Samba批量添加用户难题

这批开发测试机大部分都是基于 Centos 的 Tlinux 系统,所以使用 yum install -y samba 就能安装了。安装后发现需要在每台服务器上都配置组内 30 多个成员的 samba 账号,手工单个的加太苦逼了,于是写了一个 Samba 批量添加用户的脚本了。

#!/bin/sh
# FileName: addsmbuser.sh
# Useage : sh addsmbuser.sh userlistfile / username
#批量添加用户
add_list(){
    #从 userlist 中读取用户帐号并循环添加
    cat $1 | while read username
    do
        #利用 echo -e 的回车功能解决 smbpasswd 需要交互的问题,比 expect 简单多了
        echo -e "$username\n$username" | smbpasswd -a $username -s
        #如果添加成功,则新建家目录,避免首次直接登陆 samba 失败,适合公司铁将军鉴权方式,其他环境可以省略
        if [[ 0 = $? ]]
        then
            mkdir -p /home/$username
            chown -R $username:users /home/$username
        fi
    done
}
#单个添加用户
add_one() {
   echo -e "$1\n$1" | smbpasswd -a $1 -s && (
       mkdir -p /home/$1
       chown -R $1:users /home/$1
   )
}

# 先确认系统安装了 samba,如果没有就安装 
which smbpasswd || yum install -y samba

#如果参数 1 是文件那么执行批量添加,否则就单个添加
if [[ ! -z $1 ]];then
    test -f $1 && (
        add_list $1
    ) || (
        add_one $1
    )
else
    echo "Usage: $0 username / userlistfile"
    exit 1
fi

使用也非常简单,将如上代码保存为 addsmbuser.sh,然后将需要添加的用户名一行一个保存到一个文本文件,比如 userlist,然后执行 sh addsmbuser.sh userlist 就能批量添加这些用户了,初始密码和用户名一致。

当然,直接执行 sh addsmbuser.sh  + 用户名 还能添加单个用户。

由于 smbpasswd 正常使用是需要交互进行的,也就是输入用户名,再输入密码,这种批量交互的活完全可以使用 expect 脚本来完成。但是本文比较巧妙的利用了 echo -e 可以输出回车符(\n)的特性,非常轻巧的完成了任务。

暂时就写这么多,后面有时间再整理下坑爹的 SuSE 下如何编译安装 Samba,以及 Samba 的简单使用。

19 条回应
  1. 黛云轩商城 2016-6-25 · 20:16

    技术贴

  2. Machealx 2016-6-25 · 20:24

    博主你好,你的博客是使用了什么特别的技术吗?你的网站明明备案了啊.可是查出来的IP却是亚太地区的.

    • avatar
      Jager 2016-6-26 · 17:27

      备案用国外的IP一般没啥事。

      • 熊哥club 2016-7-7 · 10:45

        备案可以用国外ip吗?主机都在国外好备案吗?

  3. 纯洁博客 2016-6-26 · 13:47

    都是些干货呀

  4. 野人摊影视分享 2016-6-26 · 18:01

    上次看到一则新闻说有个程序员写了一款软件代替他的工作,多年过后他竟然不会编程了,博主要不要也来个爆炸性的新闻,哈哈

  5. 卢松松商城 2016-6-27 · 11:46

    好,我来了,继续看看有啥好东西

  6. 泉立方代理 2016-6-27 · 17:17

    泉立方V:unes999
    不要删做SEO的也辛苦

  7. 励志你博客 2016-6-28 · 9:21

    你的博客用的是什么主机啊?
    访问速度挺快的?
    在哪里买的呢?

  8. 烟台阿里巴巴 2016-6-28 · 14:20

    路过帮顶

  9. 五金拉手 2016-6-30 · 10:06

    对于技术,我一直都很向往,在前几年就想学习,但一直都没有成功,是因为我没有这个心

  10. 青岛促销礼品定做 2016-7-2 · 12:15

    有用,多谢

  11. 丝袜美腿 2016-7-2 · 21:07

    很实用,收藏了

  12. 经验吧 2016-7-5 · 17:30

    真的很经典。

  13. 578手赚网 2016-7-6 · 22:14

    现在你网站发的这些东西完全不懂了。。

  14. 荐洋机部落 2016-7-12 · 11:38

    学习了

  15. 户外媒体 2016-11-23 · 16:52

    虽然看不懂,但是看着好厉害的样子 :wink:

  16. 张三 2020-4-14 · 15:55

    这个脚本运行之后,无法创建啊,另外搜了很多好像都基于你这个 环境是centos6.10
    samba-common-3.6.23-53.el6_10.i686

    • hahah 2021-10-20 · 16:23

      你应该贴出来报错

  17. nues 2021-9-6 · 10:29

    学习了。