2014-06-16 122 views
2

我真的很困惑。我从两个单独的文件中读取了主机名和命令中的嵌套循环。在文件中我想放置“#”注释行,这些行需要被主脚本忽略。在下面的脚本中,命令读取正常,“#”注释行被很好地忽略,但读取Hostnames文件获得第一个主机名,然后终止while/do循环!
如果我真的把“#”注释行放在主机名中,那么它会一直读取它们,直到到达geniune主机名,然后终止循环。评论未被可靠忽略

# Read the Hostname from Hostnames.txt 
while read HOST 
[[ "$HOST" =~ ^#.*$ ]] && continue 
do 
. 
    while read Cmd1 Cmd2 Cmd3 Prompt 
    # Read Commands from Commands1.txt file but ignore comment lines 
    [[ "$Cmd1" =~ ^#.*$ ]] && continue 
    do 
    . 
    . 
    done < Commands1.txt 
done < Hostnames.txt 

另外的怪事:如果我把一个行echo $HOST[[ "$HOST" =~ ^#.*$ ]] && continue行要求,但当然它呼应不必要的屏幕输出它的工作原理。

命令文件内容:

#Juniper commands 
set cli screen-length 0,show version,exit,> 

主机名的文件内容

ABCD1234

+0

我很惊讶它的工作;你不需要'while'循环吗?他们是否做出这一选择? –

+2

输入文件中的'#'字符是否总是*像图案需要的线上的第一个字符?你有DOS风格的行结局(还是更糟,混合行结束)?也许尝试更多的东西,比如'while read ... done < twalberg

+0

对不起@Tom Zych'do'语句刚才显示出来。 –

回答

0

总结意见,do声明是在错误的地方;他们应该在while报表后立即出现。

+0

谢谢汤姆,感谢。 –