我制作了两个剧本:
这个获取IP地址&主机名:
#!/bin/bash
for i in `cat ~/script/hosts.txt`
do HOSTNAME=`echo $i|awk -F: '{print $1}'`
IP=`echo $i|awk -F: '{print $2}'`
TIMESTAMP=`date +%Y-%m-%d`
~/script/expect.sh $HOSTNAME $IP
done
这个SSH进入设备:
#!/usr/bin/expect
set timeout 20
set HOSTNAME [lindex $argv 0]
set IP [lindex $argv 1]
exp_internal 1
spawn ssh -o StrictHostKeyChecking=no root@$IP
exit
我想制作一个脚本来实现多种设备配置。 问题是由于以下错误导致SSH失败:
$ ./main.sh
spawn ssh -o StrictHostKeyChecking=no root@10.102.82.235
: Name or service not knownname 10.102.82.235
spawn ssh -o StrictHostKeyChecking=no root@10.102.82.239
: Name or service not knownname 10.102.82.239
当我调试时,我看到以下错误
spawn id exp4 sent <ssh: Could not resolve hostname 10.102.82.235\r\r: Name or
service not known\r\r\n>
: Name or service not knownname 10.102.82.235
我认为问题在于这些字符:&#34; \ r \ n&#34;,&#34; \ r \ n \ r \ n&#34; 有什么方法可以过滤掉这些吗?
答案 0 :(得分:0)
不是答案,但您的shell脚本可以使用很多改进:
#!/bin/bash
while IFS=: read -r host ip; do
timestamp=$(date +%Y-%m-%d %T)
~/script/expect.sh "$host" "$ip"
done < ~/script/hosts.txt
注意:
for line in `cat file`
读取文件的行 - for
循环从文件中读取字 $(...)
进行命令替换,而非`...`
- 提高可读性,并且易于嵌套UPPERCASE_VARIABLES
- 这些内容应保留给shell使用。TIMESTAMP
变量实际上包含日期,没有时间。"$variables"
,除非您可以解释为什么您希望它们不加引号。