我正在尝试在Linux中编写一个非常简单的shell脚本.我想实现的方案是:
在内部创建用户帐户并为其提供密码(为此,不允许与用户进行任何交互).成功后,只需向用户显示成功消息即可.其余的都不应该显示.
在RHEL上,这很简单,因为passwd命令接受–stdin选项,该选项帮助我通过Pipe传递输入.我将标准输出重定向到日志文件中. [不共享该代码,因为它有点简单,并且在StackExcahnge上针对不同的问题在此进行了多次解释.]
但是,Ubuntu不接受passwd的–stdin选项,因此我不得不使用以下方法:
#!/bin/bash
useradd -m demo &>path/to/logfile.log
passwd demo &>>path/to/logfile.log << EOF
myPasswd
myPasswd
EOF
echo "User demo successfully added to the system."
现在,这里的问题是我的输出不显示echo语句,并且还显示警告:
root@ubuntu:~# ./usercreate.sh
./usercreate.sh: line 8: warning: here-document at line 3 delimited by end-of-file (wanted `EOF')
root@ubuntu:~#
而不是我期望的:
root@ubuntu:~# ./usercreate.sh
User demo successfully added to the system.
root@ubuntu:~#
请帮助我完成以下两件事:
>有没有办法仅对此脚本禁止显示该警告?
>为什么它不打印我的echo语句,如何打印它?
PS:也欢迎编写此脚本的另一种方法或想法
谢谢
解决方法:
使用HEREDOC表示法时,您必须自己在一行中写上结束词(在您的情况下为EOF),且没有任何前导或尾随空格.
但是在这种情况下,我将使用另一种方法:
您可以使用chpasswd.该命令在所有Linux发行版中都附带(我知道),我也认为在UNIX变体中也是如此.
用法非常简单,您只需通过STDIN传递一个username:password组合即可,仅此而已,每行一个组合.要更改单个用户的密码,只需执行简单的回显即可:
echo "demo:myPasswd" | chpasswd
标签:bash,linux,shell,ubuntu
来源: https://codeday.me/bug/20191013/1907600.html