【问题标题】:Compare string with integer比较字符串和整数
【发布时间】:2012-07-19 14:18:12
【问题描述】:

我想将一个字符串与一个整数进行比较,如果它满足给定的要求,那么它将将该值添加到一个文本文件中。

test="$fqdn:$port"

if [ $test = "$fqdn:443" ]; then
  echo "$test" | tee -a list.txt
fi

在这种情况下,变量 fqdn 将保存网站的值,端口将保存不同的端口号,但我只想保留 : 之后端口为 443 的那些并将其附加到新的名为list.txt的文本文件。

当我运行这段代码时,由于某种原因,我没有得到想要的结果。有人可以帮忙吗?我对 shell 编程很陌生。

编辑:

fqdn 的值如下所示:

something1.awesome.com
something2.awesome.com
something3.awesome.com
something4.awesome.com
something5.awesome.com
...

对于端口,它看起来像这样:

80
8090
443
1090
80
80
...

编辑 2:

我确实考虑过仅将 $port 与 443 进行比较,但这在我的情况下不起作用,因为第一个 fqdn 与第一个端口一起使用,如果第一个 fqdn:port 等于 fqdn:443 之类的值,则将其添加到文本文件。

【问题讨论】:

  • 在没有给出所需输出的情况下,$fqdn 和 $port 的值是多少?
  • 简单地测试 "$port" = "443" 会更简单。
  • 这在我的情况下不起作用,因为第一个 fqdn 与第一个端口一起使用,如果第一个 fqdn:端口。如果它等于 fqdn:443 之类的内容,则将其添加到文本文件中。
  • 在您的 if 语句之前,尝试添加类似 echo "\$test='$test'; \$fqdn:443='$fqdn:443'" 的内容。这应该可以立即清楚 $test$fqdn:443 之间的区别。
  • @bloodstorm17 我不明白你想说什么。如果第一个 fqdn 与第一个 port 一起出现,有什么问题?如果您使用port 变量来创建test 字符串,那么它没有理由不起作用。如果在最终脚本中没有 port 变量,您仍然可以使用 ${test##*:} 来提取端口号。

标签: linux bash shell scripting


【解决方案1】:

试试这样的

if [ $port -eq 443 ]; then
    echo $fqdn:$port | tee -a list.txt
fi

【讨论】:

    【解决方案2】:

    将组合的 FQDN 和 PORT 数据视为 SOCKET 更容易,而且由于您还希望记录此信息,因此这是可取的。使用grep 执行简单的文本匹配,然后将找到对应于特定端口的每一行。

    套接字列表在您的脚本中是否可用,例如作为文件中的列表?如果是这样,以下将起作用(假设文件socket.txt 中每行一项):-

    PORT=443
    grep ":$PORT\$" socket.txt | tee -a list.txt
    

    这里,grep 正在文件中搜索完整端口号跟在冒号后面的所有字符串。或者,grep 也会过滤通过管道传递给它的行。

    如果您没有可用的套接字信息,您可以自己组合连续的 FQDN 和 PORT 项并生成socket.txt 文件。以下脚本(例如,名为 socket)将执行此操作,前提是您可以将 FQDN 列表和 PORT 列表写入两个文件(同样,每行一项)。

    #!/bin/bash
    
    die() {
        echo "$*" >&2
        exit 1
    }
    
    [ $# = 2 ] || die "usage: `basename $0` FQDN PORT"
    
    exec 6<$1 || die "Cannot open $1"
    exec 7<$2 || die "Cannot open $2"
    
    while true
    do
        read FQDN <&6 && read PORT <&7 || exit
        echo "$FQDN:$PORT"
    done
    

    运行为:socket fqdn.txt port.txt

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-09-03
      • 2013-09-03
      • 2015-10-27
      • 1970-01-01
      • 2013-04-05
      • 2023-04-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多