【问题标题】:How to deny empty array indexes in bash如何在bash中拒绝空数组索引
【发布时间】:2014-08-04 02:30:35
【问题描述】:

我是这样写 bash 的:

#!/bin/bash
GAP=1
Out=$1
ResultFile=$2

len=`wc -l $Out | awk '{print $1}'`
eval "(COMMAND) &"
pid=$!

i=0
while kill -0 $pid; do
    if [ -N $Out ]; then
        newlen=`wc -l $Out | awk '{print $1}'`
        newlines=`expr $newlen - $len`
        tail -$newlines $Out > temp
        IP=( $(sed -n '<SomeThing>' temp) )
        host=${IP[$i]}
            echo "exit" | nc $host 23
            if [ "$?" -eq "0" ]; then
                    (
                           <DoingSomeThing>

            ) | nc $host 23 1>>$ResultFile 2>&1
            fi
    len=$newlen
    let i++
    fi
sleep $GAP
done

当命令IP=( $(sed -n '&lt;SomeThing&gt;' temp) ) 在我的bash 中运行时,sed 命令的结果可能是什么,而输出可能是ip。我只希望当 sed 命令的输出 get ip 将其写入数组并且当 sed 的输出为空时不将其写入数组。

谢谢

【问题讨论】:

  • -N file 如果文件存在并且自上次读取后已被修改,则为真。
  • 有趣的是 man test 在 OSX 上没有显示。
  • man bash 怎么样? :)
  • 感谢 +1 向我展示了-N的用法
  • 您可能不想使用eval,并且取决于COMMAND 是什么,可能完全没有必要。

标签: arrays linux bash sed


【解决方案1】:

您的脚本在很多方面都做得不对,但是关于您的问题,快速的方法是首先将输出存储在一个变量中:

SED_OUT=$(sed -n '<SomeThing>' temp)
[[ -n $SED_OUT ]] && IP=($SED_OUT) ## Would only alter IP if $SED_OUT has a value.

【讨论】:

  • 欢迎。当然我不会介意,但你能解释一下你真正想用你的脚本做什么吗?
  • 对不起……我想处理我的服务器……因为它们大约有 20 台服务器,很难一一管理……
  • 但是有一个问题...echo "exit" | nc $host 23 和循环中的其他命令会发生什么?我想如果 sed 的输出为空,则不要检查 echo ...if 状态
  • IP 是否从“$OUT”获得多个主机?
  • 拥有一个 $OUT 的 sn-p 实际上会很好,这样我就可以帮助您简化从中提取 IP 的过程,并帮助我了解您真正想要对您的代码做什么。
猜你喜欢
  • 2019-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-11-15
  • 1970-01-01
  • 1970-01-01
  • 2014-01-12
  • 2014-10-05
相关资源
最近更新 更多