在nc连接中使用来自管道命令的stdout,在括号中使用命令

时间:2014-06-14 05:40:06

标签: linux bash redirect stdout pipeline

我想知道如何在piped命令中使用 stdout ,然后在nc连接中使用它:

<COMMAND> | \
grep -oE '((1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])\.){3}(1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])' | \
(echo "exit" | nc <IP-HERE> 23 -w 5 \
if [ "$?" -eq "0" ]; then
(
<SomeCommandsHERE>
) | nc <IP-HERE> 23 1>>$file 2>&1 )

问题:

1)如何在此帖子中使用grep command的结果作为nc命令?

2)我是否可以说grep ip 的结果仅用于以下整个声明中,就像我在这里所做的那样?

(echo "exit" | nc <IP-HERE> 23 -w 5 \
    if [ "$?" -eq "0" ]; then
    (
    <SomeCommandsHERE>
    ) | nc <IP-HERE> 23 1>>$file 2>&1 )

更新

到目前为止我尝试了什么:

<COMMAND> | \
grep -oE '((1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])\.){3}(1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])' | \
while read ip; do
    ( echo "exit" | nc "$ip" 23 -w 5
    [[ "$?" -eq "0" ]]
        (
            echo "hello"
        ) | nc "$ip" 23 1>>$file 2>&1
    ); done

这是对的吗?如果if语句不正确,我怎么能改变它?

1 个答案:

答案 0 :(得分:1)

如果将<COMMAND>的输出传递给循环,则可以一次评估一行:

<COMMAND> | while read text; do
  ipaddr=`echo $text | grep -oE '((1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])\.){3}(1?[0-9][0-9]?|2[0-4][0-9]|25[0-5])'`
  if [ $? -eq 0 ]; then
    (echo "exit" | nc $ipaddr 23 -w 5 
      if [ $? -eq 0 ]; then
       (
         <SomeCommandsHERE>
       ) | nc $ipaddr 23 1>>$file 2>&1 
      fi
    )        
  fi
done