情景描述:
使用expect的过程中,需要用到 <<-END
和 END
语法。
我用的是IDEA编辑shell脚本
脚本执行过程中,报错:
[root@docker01 heima]# ./expect_bash.bash
./expect_bash.bash: line 20: warning: here-document at line 10 delimited by end-of-file (wanted `END')
./expect_bash.bash: line 21: syntax error: unexpected end of file
自己检查自己的代码,和老师的代码是一模一样的。
Beyond Compare 工具,也没发现什么不对劲。
最后,在Linux系统上,vim
模式,set invlist
发现,缩进有问题。
因为前面用的 <<-END
,所以,后面的END
必须以tab
缩进。
而在IDEA中,把tab
默认转换成了4个空格。导致脚本报错。
如果是<<END
这种方式,那么END
就必须顶格写即可。
所以,听课要仔细。
脚本内容:
#!/usr/bin/env bash
# bash脚本中,临时使用expect的方法。
# 循环在指定的服务器上创建用户等操作。
filepath=/root/myfile/heima/data/ip.txt
while read ip pass
do
echo ${ip} ${pass}
/usr/bin/expect <<-END &>/dev/null
spawn ssh root@${ip}
expect {
"yes/no" {send "yes\n";exp_continue}
"password:" {send "${pass}\n"}
}
expect "#" {send "useradd yy1;rm -rf /tmp/*;exit;\n"}
expect eof
END
echo "${ip}服务器用户创建完毕";
done < ${filepath};