我正在尝试在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:~#
请帮我解决这两件事:
PS:欢迎编写此脚本的另一种方式或想法
由于
答案 0 :(得分:1)
使用HEREDOC表示法时,您必须单独在一行中写下结束词(EOF
),不带任何前导或尾随空格。
但在这种情况下,我会使用另一种方法:
您可以使用chpasswd
。这个命令包含在所有Linux发行版中(我知道),我认为在UNIX变种中也是如此。
用法非常简单,您只需通过STDIN传递username:password
组合即可,每行一个组合。要更改单个用户的密码,只需执行简单的回显:
echo "demo:myPasswd" | chpasswd