Shell 脚本无法识别 heredoc 分隔符
Shell script won't recognize heredoc delimiter
我正在尝试在 Linux 中编写一个非常简单的 shell 脚本。我想要实现的场景是:
创建用户帐户并在内部为其提供密码(不允许与用户交互)。一旦成功,只需向用户显示一条成功消息。 None 其余的应该显示。
在 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:
echo "demo:myPasswd" | chpasswd
我正在尝试在 Linux 中编写一个非常简单的 shell 脚本。我想要实现的场景是:
创建用户帐户并在内部为其提供密码(不允许与用户交互)。一旦成功,只需向用户显示一条成功消息。 None 其余的应该显示。
在 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:
echo "demo:myPasswd" | chpasswd