Linux 壳牌脚本赢得';不能识别分隔符

Linux 壳牌脚本赢得';不能识别分隔符,linux,bash,shell,ubuntu,Linux,Bash,Shell,Ubuntu,我正在尝试用Linux编写一个非常简单的shell脚本。我试图实现的情景是: 创建用户帐户并在内部为其提供密码(不允许与用户进行交互)。一旦成功,只需向用户显示一条成功消息。其余的都不应该被涂掉 在RHEL上,这非常简单,因为passwd命令接受--stdin选项,它帮助我通过管道传递输入。我在日志文件中重定向了标准输出。[不共享该代码,因为它太简单,并且针对StackExchange上的不同问题在此处多次解释。] 但是,Ubuntu不接受passwd的--stdin选项,因此我不得不使用以下方

我正在尝试用Linux编写一个非常简单的shell脚本。我试图实现的情景是:

创建用户帐户并在内部为其提供密码(不允许与用户进行交互)。一旦成功,只需向用户显示一条成功消息。其余的都不应该被涂掉

在RHEL上,这非常简单,因为passwd命令接受--stdin选项,它帮助我通过管道传递输入。我在日志文件中重定向了标准输出。[不共享该代码,因为它太简单,并且针对StackExchange上的不同问题在此处多次解释。]

但是,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."
而不是我期望的:

root@ubuntu:~# ./usercreate.sh 
User demo successfully added to the system.
root@ubuntu:~# 
请帮我做两件事:

  • 是否有方法仅对此脚本抑制该警告
  • 为什么它不打印我的echo语句?我如何打印
  • PS:也欢迎用另一种方式或想法来编写这个脚本


    谢谢

    当使用HEREDOC表示法时,您必须将结束词(
    EOF
    在您的情况下)单独写在一行中,没有任何前导或尾随空格

    但在这种情况下,我将使用另一种方法:

    您可以使用
    chpasswd
    。这个命令在所有linux发行版(据我所知)中都有发布,我认为在UNIX变体中也是如此

    用法非常简单,只需通过stdina
    username:password
    组合传递,就这样,每行一个组合。要更改单个用户的密码,只需执行简单的回显:

    echo "demo:myPasswd" | chpasswd
    

    正如错误消息所说,您使用了
    EOD
    ,您认为您使用了
    EOF
    。当你转录代码时,你似乎已经纠正了这个错误也许下次,使用“复制+粘贴”来确保您确实向我们显示了您的确切代码。将路径/切换到/logfile.log和
    ,但我认为您的解决方法不起作用--这里的文档也是通过标准输入接收的。在关闭
    EOF
    后,您是否有任何空间?。它应该是这行中唯一的单词,没有前导空格或尾随空格。@tripleee感谢您提供更合适的标题:)谢谢!成功了。事实证明chpasswd更有用,因为我需要在不同的发行版上运行我的脚本,并且需要一个统一的版本!!
    echo "demo:myPasswd" | chpasswd