我是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”
我在这里做错了什么?
答案 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 ]]