标签: arithmetic

编写一个 shell 脚本来获取可执行文件的输出并执行一些计算

我对shell脚本不太熟悉。我想为以下伪代码编写一个shell脚本:

min=some garbage value
for(i=1 to N){  // N and n will be taken as input for the shell script. 
   for(j=1 to n){
       val= './a.out' // call the executable a.out and take the output in val
       if(val<min)    // a.out is a random number generator script
           min=val; 
   }
   arr[k++]=min;
}
// Then I want to calculate the sum of the elements of the array 'arr'.
Run Code Online (Sandbox Code Playgroud)

如何通过 shell 脚本执行这些操作? a.out是这样的,它将产生一串数字作为输出。我必须将此字符串转换为变量val。这该怎么做?例如,作为输出a.out生成12.34但是12.34是字符数组而不是浮点数。我想将其转换为通过 shell 脚本浮动,但我无权更改a.out …

shell shell-script arithmetic

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

增加从文件中提取的值

我有一个正在编写的 cron,它将每小时重复一次,我需要一种简单的方法将计数器从上次运行传递到下一次运行。

我的计划是在最后将数字添加到文件中,然后在开头调用它,例如

在第一次 cron 运行结束时:

INC_COUNT=1
echo $INC_COUNT > inc_counter.txt
Run Code Online (Sandbox Code Playgroud)

然后在第二次运行开始时:

INC_COUNT_FILE="inc_counter.txt"
OLD_INC_COUNTER=$(cat "$INC_COUNT_FILE")    
Run Code Online (Sandbox Code Playgroud)

到目前为止一切顺利,但现在我需要增加这个数字。我试过:

NEW_INC_COUNTER="$OLD_INC_COUNTER"+1
NEW_INC_COUNTER="$OLD_INC_COUNTER+1"
Run Code Online (Sandbox Code Playgroud)

两者都没有奏效。增加这个数字的最佳方法是什么?

shell arithmetic variable

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

为什么 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
查看次数

awk 算术不同于 expr

awk 算法和 expr 之间有一些对比输出。

例子

expr 11111111111111111111 / 22
Run Code Online (Sandbox Code Playgroud)

505050505050505050
Run Code Online (Sandbox Code Playgroud)

但是使用 awk:

echo '11111111111111111111' | awk '{q=$1/22;;print q}'
Run Code Online (Sandbox Code Playgroud)

505050505050505024
Run Code Online (Sandbox Code Playgroud)

有人可以解释一下吗?

awk arithmetic expr

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

如何在 bash 中汇总多个 bash 命令的结果?

所以我有以下内容

cat a1 | wc -l // term1
cat a2 | wc -l // term2
cat a3 | wc -l // term3
...
cat a10 | wc -l // term10
Run Code Online (Sandbox Code Playgroud)

我想term1 + term2 + ... + term10用单行进行计算(如果很长也可以)。理想情况下我想得到

$(cat a1 | wc -l) + ... $(cat a10 | wc -l)
Run Code Online (Sandbox Code Playgroud)

bash arithmetic

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

测试表达式中的参数扩展是否可能?

当我在中尝试以下表达式时,bash收到一条奇怪的错误消息:

[: -lt: unary operator expected
Run Code Online (Sandbox Code Playgroud)

首先是函数定义

some_func () {
  (( 3 + 5 ))
}
Run Code Online (Sandbox Code Playgroud)

还有表情

[ $(some_func) -lt 10 ] && true
Run Code Online (Sandbox Code Playgroud)

我想问题是将运算符-lt与命令替换和/或算术扩展混合在一起?

退出代码$?为 2,消息为an unary op was expected

bash arithmetic command-substitution test

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

为什么设置变量名会给我“找不到命令”?

我想输入一个数字,然后加税并减去折扣。

我在尝试:

#!/bin/sh
...
final_amount = $(echo "$purchase_amount+($purchase_amount * $tax)-($purchase_amount * $discount)" |bc -l)
...
Run Code Online (Sandbox Code Playgroud)

但我得到:

$ . 3_purchase_amounts.sh 
...
final_amount: command not found
...
Run Code Online (Sandbox Code Playgroud)

shell bash shell-script arithmetic variable

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

字符串是算术表达式吗?

在 Bash 中,我使用了一个需要算术表达式的字符串:

$ (( hello ))
$ echo $?
1

$ echo $(( hello ))
0

$ let aaa=hello
$ echo $?
1
$ echo $aaa
0
Run Code Online (Sandbox Code Playgroud)

没有报告错误。那么字符串是算术表达式吗?如果是,字符串的值是否始终为 0?

我的问题来自评论为什么命令不能与以赋值开头的命令一起工作?

shell bash arithmetic

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

如何在shell算术中保护变量名?

变量可以用花括号保护。

Mynewvar=1
echo $Mynewvar
1
echo ${Mynewvar}
1
Run Code Online (Sandbox Code Playgroud)

但是,在 shell 内算术时我无法再保护它们。

Mynewvar=1
echo $((Mynewvar+9))
10
echo $(({Mynewvar}+9))
Run Code Online (Sandbox Code Playgroud)
bash: {Mynewvar}+9: syntax error: operand expected (error token is "{Mynewvar}+9")
Run Code Online (Sandbox Code Playgroud)

当变量名在 shell 算术中时,包围变量名的正确方法是什么?

shell bash arithmetic variable

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