用于查找数字因子的Shell程序不起作用

时间:2015-09-29 11:42:37

标签: shell

我是Shell编程的新手。我试图找到作为我的程序的参数传递的数字的因子。到目前为止的脚本是:

#!/bin/bash

number=$1

factorial=1

i=$number

while [ $i != 1 && $i != 0 ]

do
    factorial=`expr $factorial \* $i`
    i=` expr $i – 1 `

done

echo “Factorial of $number is $factorial”

但是当我执行程序时:

sh fact.sh 5

它说:

Fact.sh: 10: [: missing ] “Factorial of 5 is 1”

我在这里做错了什么?

3 个答案:

答案 0 :(得分:3)

当您在shell脚本中使用[时,实际上使用的是test命令,而您实际上并不遵守其规则。

尝试man test找出syntax of the test command

你的剧本中还有其他问题,但克服这些问题都是学习的一部分,我希望我的小提示可以帮助你学习。

答案 1 :(得分:2)

你对当前的问题有一些答案。

快速重写以演示一些bash功能

#!/bin/bash
number=$1
declare -i factorial=1
declare -i i
for ((i=number; i != 1 && $i != 0; i--)); do
    (( factorial = factorial * i ))
done
echo “Factorial of $number is $factorial”

注释

  • 使用((...))进行算术评估
  • 不需要使用$来引用算术表达式中的变量
  • 不要使用花哨的引号(),它们对shell没有特殊意义。
  • 我使用declare通知shell这些是整数 (我不知道这会提高性能)
  • 无特殊原因使用for循环而不是while循环。

答案 2 :(得分:1)

表达式while [ $i != 1 && $i != 0 ]不起作用。

使用while [ $i != 1] && [ $i != 0 ]代替,或者,如果您使用的是BASH while [[ $i != 1 && $i != 0 ]]