标签: math

如何将数组中的所有值相加

我已经坚持了很长时间了。尝试谷歌搜索,找不到我要找的东西。

我只需要添加一个数组中的所有值。(称为数据包的数组)我已经到了可以添加它们的地步,但是当发生这种情况时,无法在脚本中稍后调用数值。

这是整个脚本,非常简单,只是检查与时间(也就是带宽)相比的数据包数据量。

rawdata=`tcpdump -nn -S -r test.pcap | awk '{print $1" "$NF}'`
time="`echo "$rawdata" | sed -r 's/(.{15}).*/\1/'`"
starttime="`echo "$time" | awk 'NR > 1 { exit }; 1'`"
endtime="`echo "$time" | awk 'END{print}'`"
stime=`date --date="$starttime" +%s`
etime=`date --date="$endtime" +%s`
difftime="echo $(($etime - $stime))"
echo $difftime
echo $addedpackets
echo $sum
echo ------------------------------------
packets="`echo "$rawdata" | awk '{print $2}' | sed 's/[^0-9]*//g'`"
echo ------------------------------------
for i in "${packets[*]}"
do
    plus=$(printf '%d+' ${i})0
    added="echo $(($plus))"
done
echo ------------------------------------
$added
$difftime
bc …
Run Code Online (Sandbox Code Playgroud)

array shell-script bandwidth math

2
推荐指数
1
解决办法
1082
查看次数

bash:将日志中的值设置为变量

我有一个由 240 个浮点数组成的日志文件,格式如下:

5.4
5.1
5.2
5.4
5.4
4.9
5.0
5.2
5.5
5.3
5.6
5.4
5.1
5.3
5.3
5.1
5.2
..
4.8
Run Code Online (Sandbox Code Playgroud)

在 bash 环境中访问此日志文件,我需要计算此数据的平均值(元素的总和除以元素数),然后将结果值存储为我将在同一个 bash 中使用的新变量出于某些目的编写脚本,例如我需要存储一个变量 mean = 5.0 是否可以直接在一个 bash 脚本中执行此操作?

bash math variable

2
推荐指数
1
解决办法
49
查看次数

为什么 factor 命令会在 RSA 模数上产生废话?

好的,所以我想我可能在……某事上发现了一个缺陷。老实说我不知道​​。这是一个多么奇怪的场景。

我试图破解非常小的非对称 (RSA) 加密,就像我的一个朋友的概念证明项目一样。对于那些不太了解 RSA 的人,我将在这里介绍一些重要的事实。如果您已经了解 RSA,请跳过以下段落:

RSA 是一种非对称加密算法(也称为公钥/私钥密码术)。这意味着有 2 个密钥:公共和私有。任何一个都可以用来加密,但只有另一个密钥才能解密。所以如果我用私钥加密一个小文本文件,只有公钥可以解密它。这在密钥交换中很有用。这是通过使用称为素数分解的数学原理来实现的(将两个素数相乘很容易,但从乘积中分解出原始的 2 个素数却很困难)。所以想象一下你的公钥可以加密,但只有你的私钥可以解密。你的私钥有 2 个质数,你的公钥有这 2 个质数的乘积(模数)。有人能够解密使用公钥加密的数据的唯一方法是将模数分解为 2 个素数并对私钥进行逆向工程。这就是我试图做的,但规模很小。

是的,所以质因数分解!那就是我正在做的。我生成了一个 128 位 RSA 密钥(就非对称加密而言很小,特别是考虑到我的笔记本电脑中的 2GHz 处理器在一秒钟内将其分解)。我提取了模数,并在将其从十六进制转换为十进制时使用了不正确的命令(使用 bc 时忘记选择 ibase),结果为 97964999429910939982995739699617。然后我使用了因子命令。

这就是事情变得时髦的地方。

当我考虑它时,我得到了8 个答案,而不是我期望的 2 个。

97964999429910939982995739699617:3 3 3 17 433 613 937 858164002128703934431

现在想想,我明白为什么我没有得到 2 个答案:这不是 RSA 密钥对的真正模数。但这不是我发现的“错误”(否则你不会读到这个)。

为了仔细检查,我决定将这些数字相乘以再次获得模数。

我使用了命令

回声 $((3*3*3*17*433*613*937*858164002128703934431))

好吧,这肯定会导致再次开始编号,对吗?没有理由不应该是 97964999429910939982995739699617。

好吧,这就是我的思路,直到我得到答案 -8628928582186374751。

我完全不知道为什么这个命令会返回一个如此明显错误的答案。它怎么可能是负面的?这是本机数学函数中的故障吗?factor 命令是正确的,我知道这是肯定的,因为当我尝试使用真实的物理计算器 (TI-84) 时,它确实返回了我最初分解的值。

我首先在我的笔记本电脑上尝试了这个命令(运行 Kali Linux。命令“uname -rvo”告诉我“4.3.0-kali1-amd64 #1 SMP Debian 4.3.3-5kali4 (2016-01-13) GNU/Linux ”)。然后我远程连接到我高中的 Gentoo 服务器并运行相同的命令。同样,显然无效的答案。Uname 说“4.1.15-gentoo-r1 #2 SMP Fri Mar …

bash cryptography utilities arithmetic math

1
推荐指数
1
解决办法
635
查看次数

检查十进制数是否在 bc 的范围内

我已经写了这个 if ,这显然不起作用,而且我仍然无法克服它:

#LASTEFFECTIVEHASH
if (( $(echo "$LASTEFFECTIVEHASHMINVAL < $LASTEFFECTIVEHASH < $LASTEFFECTIVEHASHMAXVAL" | $BC -l) )); then
                echo "$DATESTAMP - LASTEFFECTIVEHASH=$LASTEFFECTIVEHASH is between $LASTEFFECTIVEHASHMINVAL and $LASTEFFECTIVEHASHMAXVAL"|tee -a $LOGFILE
else
                echo "$DATESTAMP - LASTEFFECTIVEHASH=$LASTEFFECTIVEHASH is not between $LASTEFFECTIVEHASHMINVAL and $LASTEFFECTIVEHASHMAXVAL"|tee -a $MSGFILE $LOGFILE
fi
Run Code Online (Sandbox Code Playgroud)

但是,当值超出范围时,会导致以下结果:

20170810003646 - LASTEFFECTIVEHASH=139.2 is between 104.9 and 136.9
Run Code Online (Sandbox Code Playgroud)

我遵循数学语法:如果 x > 104.9 且 < 136.9,则在数学中写为104.9 < x < 136.9。但我怀疑 bash/bc 的行为与我的数学老师不同。

如果 bc 不会数到 137 就太好了;)

shell-script bc math floating-point

1
推荐指数
1
解决办法
1007
查看次数

$@ 在数学循环中使用

我正在尝试编写一个 Bash 脚本,它将数字列表作为命令行参数,然后输出这些数字的总和。

因此,脚本将按原样运行,script.sh 1 555 22 122 66然后将它们汇总起来。我知道它们需要传递给$@变量,然后可能会运行一个循环,但我不明白如何将 的内容转换为$@int 来进行数学运算。我试图这样做:

#!/bin/bash
for i in $@
do
    $@+$@
    echo "the total is `$@`"
done
Run Code Online (Sandbox Code Playgroud)

bash shell-script environment-variables regular-expression math

1
推荐指数
2
解决办法
1703
查看次数

shell 数学是否在子 shell 中运行?

当我在 中执行一个简单的数学运算时#!/bin/sh,是否会创建一个子shell?

例如,

addition=$(( 1 + 1 ))
Run Code Online (Sandbox Code Playgroud)

语法会建议一个子shell,但我在这上面找不到任何东西

shell subshell math

1
推荐指数
1
解决办法
282
查看次数

将方程拟合到一组数据

我有一组数据:

1.12158 0.42563 0.07
1.12471 0.42112 0.07
1.12784 0.41685 0.07
1.13097 0.41283 0.07
1.13409 0.40907 0.07
1.13722 0.40556 0.07
1.14035 0.40231 0.07
1.14348 0.39933 0.07
1.1466 0.39661 0.07
1.14973 0.39417 0.07
1.15285 0.39201 0.07
1.15598 0.39012 0.07
1.15911 0.38852 0.07
1.16224 0.3872 0.07
1.16536 0.38618 0.07
1.16849 0.38544 0.07
1.17162 0.385 0.07
1.17474 0.38486 0.07
1.17787 0.38543 0.07
1.181 0.38714 0.07
1.18413 0.38994 0.07
1.18725 0.39378 0.07
1.19038 0.39858 0.07
1.19351 0.40426 0.07
1.19664 0.41071 0.07
1.19976 0.41786 0.07
Run Code Online (Sandbox Code Playgroud)

第一列是 …

plotting math

1
推荐指数
1
解决办法
157
查看次数

尝试完成 Project Euler #5,通过了所有语法检查,但不起作用

尝试完成Project Euler #5。我的代码在逻辑上应该可以工作,并且它通过了 ShellCheck,但由于某种原因没有给出输出。代码如下。谢谢,抱歉,如果这应该在不同的堆栈交换站点中

#!/bin/bash
 i=1
 while [[ $((i % 2)) -eq 0 && $((i % 3)) -eq 0 && $((i % 5)) -eq 0 && $((i % 7)) -eq 0 && $((i % 11)) -eq 0 && $((i % 13)) -eq 0 && $((i % 17)) -eq 0 && $((i  % 19)) -eq 0 ]]
 do
     i=$((i+1))
 done
 echo $i
Run Code Online (Sandbox Code Playgroud)

bash algorithms math

-1
推荐指数
1
解决办法
214
查看次数