Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 将字符串与整数进行比较_Linux_Bash_Shell_Scripting - Fatal编程技术网

Linux 将字符串与整数进行比较

Linux 将字符串与整数进行比较,linux,bash,shell,scripting,Linux,Bash,Shell,Scripting,我想比较一个字符串和一个整数,如果它满足给定的要求,那么它会将该值添加到一个文本文件中 test="$fqdn:$port" if [ $test = "$fqdn:443" ]; then echo "$test" | tee -a list.txt fi 在本例中,变量fqdn将保存网站的值,端口将保存不同的端口号,但我只想在:之后保留端口号为443的端口号,并将其附加到名为list.txt的新文本文件中 当我运行这段代码时,由于某种原因,我没有得到期望的结果。有人能帮忙吗?我对sh

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

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
...
对于端口,如下所示:

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的值,则将其添加到文本文件中。

尝试类似的方法

test="$fqdn:$port"

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

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

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

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

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

#/bin/bash
死(){
回显“$*”>&2
出口1
}
[$#=2]| | die“用法:`basename$0`FQDN端口”

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