质数:(prime number)又称素数,有无限个。一个大于1的自然数,除了1和它本身外,不能被其他自然数整数(除0以外)的数称之为素数(质数);否则称为合数。
双圆括号:(( expression )) expression可以是任何的数字赋值表达式或者是数学表达式,如果是变量,在变量前面可以加$符号,也可以不加。双括号命令符号
符号 | 说明 | 符号 | 说明 |
---|---|---|---|
var++ | 后增量 | << | 逐位左移 |
var-- | 后减量 | >> | 逐位右移 |
++var | 前增量 | & | 逐位布尔逻辑与 |
--var | 前减量 | | | 逐位布尔逻辑或 |
! | 逻辑否定 | && | 逻辑与 |
~ | 逐位取反 | || | 逻辑或 |
** | 取幂 |
双方括号:[[ expression ]]字符串比较提供高级功能,双方括号里面的expression使用在test命令中使用的标准字符串比较,但是它提供了test命令没有的模式匹配功能。
[root@rhel6164 scripts]$ cat test.sh
#!/bin/bash
#using patern matching
if [[ $(ls $(pwd)) == p* ]];then #模式匹配
echo "pattern success"
else
echo "pattern fail"
fi
脚本:
[root@rhel6164 scripts]$ cat prime.sh
#!/bin/bash
function primef #定义函数,这里把输出质数和求质数之和都放到primef函数里面完成
{
var=$1_ #防止$1没有赋值,会赋值没有初始化的变量给var
var=${var/_/} #去掉多余的下划线( _ )
sum=0
i=1
while [ $i -le $var ];do #这里使用了[,这个命令[为test的bash的内建命令
bool=1 #初始化标志
for (( j=2; $j<$i; j++ ));do #这里使用了双圆括号
{
if [ $(($i%$j)) -eq 0 ];then #这里也使用了双圆括号求值,在双圆括号里面的操作数可以加上$,也可以不加,后面就没有加上
bool=0
break
fi
}
done
if [ $bool -eq 1 ];then
echo -n "$i "
sum=$((sum+i))
fi
#i=$((i+1))
i=$(expr $i + 1) #用expr命令求值,注意两个操作数之间要有空格
done
echo
echo -n "the sum of prime($var) is $sum"
}
echo -n "Please input one integer:"
read varint
primef $varint
echo
运行:
[root@rhel6164 scripts]$ bash prime.sh
Please input one integer:10
1 2 3 5 7
the sum of prime(10) is 18