我正在尝试在Linux中编写一个非常简单的shell脚本。 我试图达到的情景是:
创build一个用户帐户并在内部给它一个密码(不允许与用户交互)。 一旦成功,只需向用户显示成功消息。 其余的都不应该显示。
在RHEL上,事实certificate这很简单,因为passwd命令接受了帮助我通过Pipe传递input的–stdin选项。 我redirect到一个日志文件的标准输出。 [不要分享这个代码,因为它很简单,在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."
现在这里的问题是我的输出不打印回显语句,也显示一个警告:
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:写这个脚本的另一种方法或想法也是受欢迎的
谢谢
当使用HEREDOC表示法时,必须将结束词( EOF
在您的案例中)单独写成一行,而不用任何前导或尾随空格。
但在这种情况下,我会用另一种方法:
你可以使用chpasswd
。 这个命令是在所有的Linux发行版(我知道),我也认为在UNIX变种。
用法非常简单,只需通过STDIN username:password
组合即可,这就是每行一个组合。 要更改单个用户的密码,只需执行一个简单的回显:
echo "demo:myPasswd" | chpasswd