gpt4 book ai didi

linux - Shebang 导致脚本失败

转载 作者:太空宇宙 更新时间:2023-11-04 04:48:05 27 4
gpt4 key购买 nike

我不太擅长 bash,我尝试编写一个脚本来使用 openSSH 连接到我的所有交换机,以便进行一些配置。

我创建了一个包含所有 25 个交换机的数组,然后使用循环打开与每个交换机的 SSH 连接。

由于我使用的是 Windows 并使用 bash,因此我刚刚安装了 Cygwin。

但是,我必须使用 Expect 并以纯文本形式编写密码,因为交换机非常差,这对我来说是最好的方法(我不会手动将 RSA key 放在每个交换机上,因为这会花费我与在每个交换机上手动编写配置一样多的时间)。

我使用 shebang #!/usr/bin/expect -f 使 bash 识别 Expect。当我这样做时,期望语法(spawn、expect、interact)完美地工作,但我的数组不起作用。

我收到以下错误消息:

extra characters after close-quote while executing "arrayname=("172.21.21.20" "172.20.55.55" ... "

当我更改shebang并使用#!/bin/bash时,不再找到expect:

./stationsnmp.sh: line 20: spawn : command not found couldn't read ./stationsnmp.sh: line 24: send : command not found couldn't read file "assword": no such file or directory ./stationsnmp.sh: line 27: send : command not found ./stationsnmp.sh: line 28: interact : command not found

我真的不是 bash 专业人士,这说明我无法解决这个小问题...欢迎提供一些帮助。

编辑:下面是我的代码的一部分

#!/bin/bash

switch=("172.20.0.229" "172.20.0.232" "172.20.0.233" "172.21.0.15" "172.21.0.16" "172.21.2.1" "172.20.2.250" "172.21.3.1" "172.20.3.250" "172.21.4.1" "172.20.4.250" "172.21.6.1" "172.20.6.250" "172.21.7.1" "172.20.7.250" "172.21.8.1" "172.20.8.250" "172.20.9.250" "172.21.9.1" "172.21.10.1" "172.20.10.250" "172.21.11.1" "172.20.11.250" "172.21.12.1" "172.21.12.250")

nmb=`echo ${#switch[@]}`

set timeout 3


for ((ii=0; ii<=$nmb; ii++))
#for ii in {0..${#switch[@]}}
do
if [ ${switch[$ii]:5:1} -eq 1 ]
then
ipdc=`echo ${switch[ii]} | grep -o -E '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.'`"10"


spawn ssh admin@switch[$ii]


expect "*assword*"
send "PASS\r"
interact


exit
fi
done

最佳答案

您正在混合 bashexpect,它们是两种完全不同的语言。您可能希望有一个具有适当选项处理功能的 bash 包装器脚本(请参阅 getopts),该脚本获取 IP 地址列表并为传递到 bash 包装器的每个 IP 地址执行您的期望脚本。如果您的 expect 脚本很小,您可能希望将其嵌入到您的 shell 脚本中,而不是将其放在单独的文件中。

编辑:

#!/bin/bash

switches=("172.20.0.229" "172.20.0.232")

for ip in "${switches[@]}"; do
expect "${ip}" <<-'EOT'
set host [lindex $argv 0]
set timeout 3
spawn ssh -l admin $host
expect "*assword*"
send "PASS\r"
interact
exit
EOT
done

关于linux - Shebang 导致脚本失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22779464/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com