【问题标题】:Bash script to add and remove users用于添加和删除用户的 Bash 脚本
【发布时间】:2026-01-16 19:10:02
【问题描述】:

我是 bash 脚本的初学者,我创建了一个 bash 脚本来在 Linux 上添加和删除用户。 但是,由于我在脚本方面遇到了一些问题,但并不是真正的重大问题,但如果有人能指出我如何改进脚本以及我正在编写脚本的最糟糕的做法会有所帮助

但是我注意到的问题是脚本需要 -a 来添加用户 -d 来删除用户和 -h 来获得帮助 -a 标志作为 2 个可选参数 -p 用于密码,-s 用于外壳所以命令将是

./useradd.sh -a user -p password -s shell

这按预期工作,用户已添加到系统中,但我面临的问题是,如果我不输入 -a 标志并指定 -s 和 -p 标志,则脚本刚刚退出我想显示让用户清楚地知道为什么它退出了,我假设有这么多这样的错误,但我没有对它进行太多测试,任何帮助将不胜感激,所以这是我的脚本

https://github.com/abhijith7025/bash_scripts/blob/master/useradd.sh

【问题讨论】:

  • 因为你不能给不存在的用户附加密码?
  • 如果我运行 ./useradd.sh -s /bin/sh -p blahblahblah 脚本刚刚退出,我希望它能够解决一个错误,说 -a 或 -d 或 - h 未使用,如果使用 -a 必须是第一个参数
  • 那么,基本上你的问题归结为 bash 中的命令行处理?这是一个简单的编程问题,您可以将其隔离为minimal reproducible example。特别是,当只有命令行处理是问题时,删除所有不相关的部分,可能是操作的要点。作为这里的新用户,也可以使用tour 并阅读How to Ask

标签: linux bash scripting shell sysadmin


【解决方案1】:

...我创建了一个 bash 脚本来在 Linux 上添加和删除用户。

您可能需要重新考虑这一点,因为 Linux 为这两个操作提供了单独的命令。 创建一个用户比摆脱一个用户要多得多,所以你可能会在尝试将两者结合起来时遇到麻烦。

无论如何:

您的案例陈述没有“其他”分支(“* )”)。 这可能是您在“滥用”脚本时没有收到错误的原因。

case $opt in 
  a )  
    ;; 
  d )  
    ;; 
  h )  
    ;; 
  * )
     usage 
     exit 1 
     ;; 
esac 

其他需要注意的事项:

对于可以删除用户的脚本来说,

useradd 可能是一个糟糕的名称。

您允许将 shell 指定为参数,但您不检查它是否存在

Linux 命令通常对“事物”或“事物”列表进行操作,并且该操作由 [通常] 在事物之前的选项限定。因此,您的脚本可能最好像这样调用:

./manage_user  -a  -p password  -s shell_exe  user1 
                |   |            |            |
                |   |            |            User name 
                |   |            Shell for User
                |   Password for User
                Add a User

./manage_user  -d  user2 
                |  |
                |  User name 
                Delete a User

【讨论】: