如何通过Shell Script修改用户名及usermod命令执行报错问题咨询
问题根因
- 你混淆了
passwd和usermod的命令参数:只有passwd支持--stdin参数从标准输入读取密码,usermod命令本身没有--stdin选项,因此代码里的--stdin会被usermod识别为你要设置的新用户名,才会抛出invalid user name '--stdin'的报错。 usermod -l的原生语法为usermod -l <新用户名> <旧用户名>,新用户名直接作为参数传递即可,不需要通过标准输入传值。
修复后的代码
echo "Give me the old username" read name echo "Give me the new username" read new # 直接传递新用户名参数即可,不需要管道和--stdin usermod -l "$new" "$name" # 可选:如果需要同步修改用户家目录名称,可额外执行以下命令 # usermod -d /home/"$new" -m "$new"
注意事项
- 运行该脚本需要root权限,否则
usermod没有修改用户属性的权限。 - 执行修改用户名操作前建议确认目标用户没有处于登录状态,避免出现进程占用相关的报错。
内容的提问来源于stack exchange,提问作者Jesús Alexis Ramírez Navor
相关产品推荐
相关产品推荐

