带有shell脚本的数字产品

时间:2017-05-31 13:45:28

标签: bash shell product multiplication

如何在bash中获得1号码的产品? (12345> 1x2x3x4x5)

我正在尝试获取一个脚本来进行乘法运算,我已经尝试转义* char但没有运气,我也试过摆弄expr。

echo -n "Enter number "
read n

len=$(echo $n | wc -c)

len=$(( $len - 1 ))

for (( i=1; i <= $len; i++ ))
do
   prod=$(($prod \* $(echo $n | cut -c $i) ))
done
echo "Product of $n is $prod"

4 个答案:

答案 0 :(得分:2)

您可以从参数扩展中获取字符串的长度,无需调用外部工具。

#!/bin/bash
read -p 'Enter number: ' n

product=1
for (( i=0; i < ${#n}; ++i )) ; do
    d=${n:i:1}
    (( product *= d ))
done
printf '%d\n' $product

而且,为了好玩,使用Perl:

perl -MList::Util=product -le 'print product(split //, shift)' -- "$n"

答案 1 :(得分:1)

gawk (GNU awk)解决方案:

echo 12345 | awk -v FPAT="[0-9]" '{ r=$1; for(i=2;i<=NF;i++) r=r*$i }END{ print r }'

输出:

120
  • FPAT="[0-9]" - 表示字段值,以便每个字段包含一个数字

答案 2 :(得分:1)

据我所知,你希望得到数字乘数的值

假设您有号码:

number=12345

您必须在数字之间插入*:

echo $number | sed 's/\([0-9]\)/\1*/g'

我们将获得字符串:

1*2*3*4*5*

我们不需要最后的星号 - 让我们删除它:

echo $number | sed 's/\([0-9]\)/\1*/g' | sed 's/.$//g'

我们会得到这个:

1*2*3*4*5

我们现在可以将其重定向到calc:

echo $number | sed 's/\([0-9]\)/\1*/g' | sed 's/.$//g' | calc -p

它的标准是:

120

答案 3 :(得分:1)

\*在算术表达式中是错误的,它应该只有*。但即使这样运行你的代码也会给出:

$ bash product.sh
Enter number 12
product.sh: line 10: * 1 : syntax error: operand expected (error token is "* 1 ")
Product of 12 is

错误的原因是$prod变量未设置为 例如,之前的初始值,因此它被扩展为空值 在您的终端尝试:

$ echo $prod

$

在您的脚本中,您应该在使用之前将prod设置为初始值 这是第一次。它应该是:

echo -n "Enter number "
read n

len=$(echo $n | wc -c)

len=$(( $len - 1 ))

prod=1

for (( i=1; i <= $len; i++ ))
do
    prod=$(($prod * $(echo $n | cut -c $i) ))
done
echo "Product of $n is $prod"

您的代码还有一些问题: