要点
- shell中数组的表示及初始化
- test表达式,运算表达式,if表达式,for表达式,赋值表达式
- 输入参数的表示,如$@, $#, $0, $1…
#!/bin/bash
#输入一定范围内素数
#declare -a prime
function usage(){
printf "Usage : %s start_num end_num\n" $0
}
#初始化数组
function init(){
s=$1
e=$2
for (( i=$s; i<=$e; i++ ));do
#定义数组
prime[$i]=0
done
}
#输入参数范围判断
if [[ ${1} -gt ${2} ]];then
echo "start_num must less than end_num"
exit
fi
if [[ ${1} -lt 0 ]];then
echo "input_num must greater than 0"
fi
#usage abc
#printf "%d\n" $#
if [[ $# -ne 2 ]];then
usage
exit
fi
#计算部分正式开始
start_num=$1
end_num=$2
sum=0
init 0 ${end_num}
for (( i=2; i<=${end_num}; i++ ));do
if [[ ${prime[$i]} -eq 0 ]];then
prime[0]=$[ ${prime[0]} + 1 ]
prime[${prime[0]}]=$i
echo $i
sum=$[ ${sum} + $i ]
fi
for (( j=1; j<=${prime[0]}; j++ ));do
if [[ $[ ${i} * ${prime[$j]} ] -gt ${end_num} ]];then
break
fi
prime[ $[ ${i} * ${prime[$j]} ] ]=1
if [[ $[ ${i} % ${prime[$j]} ] -eq 0 ]];then
break
fi
done
done
echo ${sum}