Bash

數學運算 - Bash 腳本

  • November 26, 2019

我正在嘗試編寫一個腳本(script1.sh),它給出第一個數字中每個數字的總和,提高到第二個數字的冪。所以

./script1.sh 12345 2

應該輸出55

(因為 1+4+9+16+25=55)

或者./script1.sh 3706907995955475988644381 25

應該輸出3706907995955475988644381

我寫了一個腳本,但在某些情況下我得到了一個負面的輸出,我不明白這是怎麼發生的。

例如

./script1.sh 3706907995955475988644380 25

輸出

-2119144605827694052

我的腳本:

#!/bin/bash
sum=0

value=$1

arr=()
for ((i = 0; i < ${#value}; i++)); do
   arr+=(${value:$i:1})
done

for x in "${arr[@]}"; do
   sum=$(($sum+(x**$2)))
done
echo $sum

shell 算術bash使用 C 編譯器支持的最廣泛的整數類型。在大多數現代系統/C 編譯器上,這是 64 位整數,因此“僅”覆蓋 -9223372036854775808 到 9223372036854775807 的範圍,並將其中的數字換行。為此,您需要使用另一個工具,例如 bc:

#!/bin/bash

num1=$1
num2=$2
sum=0

for (( i=0; i<${#num1}; i++ )); do
   n=${num1:$i:1}
   sum=$( bc <<<"$sum + $(bc <<<"${n}^$num2")" )
done

echo "$sum"

用簡短的**awk**腳本:

**sum_powered.awk**腳本:

#!/bin/awk -f
BEGIN{
   split(ARGV[1], a, "");
   pow = ARGV[2];
   for (i in a) sum += a[i] ** pow;
   print sum;
}

用法:

$ ./sum_powered.awk 12345 2
55

$ ./sum_powered.awk 3706907995955475988644381 25
3706907995955475217645568

在執行之前,您可能需要向新的awk腳本添加執行權限:

$ chmod +x sum_powered.awk 

引用自:https://unix.stackexchange.com/questions/553787