我正在尝试在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
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。