Linux脚本无法识别特别符号,Linux-Shell脚本无法识别heredoc分隔符

我正在尝试在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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值