Linux 壳牌脚本赢得';不能识别分隔符
我正在尝试用Linux编写一个非常简单的shell脚本。我试图实现的情景是: 创建用户帐户并在内部为其提供密码(不允许与用户进行交互)。一旦成功,只需向用户显示一条成功消息。其余的都不应该被涂掉 在RHEL上,这非常简单,因为passwd命令接受--stdin选项,它帮助我通过管道传递输入。我在日志文件中重定向了标准输出。[不共享该代码,因为它太简单,并且针对StackExchange上的不同问题在此处多次解释。] 但是,Ubuntu不接受passwd的--stdin选项,因此我不得不使用以下方法:Linux 壳牌脚本赢得';不能识别分隔符,linux,bash,shell,ubuntu,Linux,Bash,Shell,Ubuntu,我正在尝试用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:~#
请帮我做两件事:
谢谢当使用HEREDOC表示法时,您必须将结束词(
EOF
在您的情况下)单独写在一行中,没有任何前导或尾随空格
但在这种情况下,我将使用另一种方法:
您可以使用chpasswd
。这个命令在所有linux发行版(据我所知)中都有发布,我认为在UNIX变体中也是如此
用法非常简单,只需通过stdinausername:password
组合传递,就这样,每行一个组合。要更改单个用户的密码,只需执行简单的回显:
echo "demo:myPasswd" | chpasswd
正如错误消息所说,您使用了
EOD
,您认为您使用了EOF
。当你转录代码时,你似乎已经纠正了这个错误也许下次,使用“复制+粘贴”来确保您确实向我们显示了您的确切代码。将路径/切换到/logfile.log和,但我认为您的解决方法不起作用--这里的文档也是通过标准输入接收的。在关闭EOF
后,您是否有任何空间?。它应该是这行中唯一的单词,没有前导空格或尾随空格。@tripleee感谢您提供更合适的标题:)谢谢!成功了。事实证明chpasswd更有用,因为我需要在不同的发行版上运行我的脚本,并且需要一个统一的版本!!
echo "demo:myPasswd" | chpasswd