shell脚本:unexpected end of file错误解决

文章讲述了在使用EXPECT进行SSH操作的shell脚本中,遇到的HERE文档错误。问题源于IDEA将TAB转换为4个空格,而EXPECT要求END必须以TAB缩进。修正方法是确保END使用正确的缩进或避免使用带有-的HERE文档指示符。
摘要由CSDN通过智能技术生成

情景描述:
使用expect的过程中,需要用到 <<-ENDEND 语法。
我用的是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};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值