输入一串随机数字,然后按千分位输出。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了输入一串随机数字,然后按千分位输出。相关的知识,希望对你有一定的参考价值。

输入一串随机数字,然后按千分位输出。

比如输入数字串为“123456789”,输出为123,456,789

#!/bin/bash
read -p "输入一串数字:" num
v=`echo $num| sed 's/[0-9]//g'`
if [ -n "$v" ]
then
    echo "请输入纯数字。"
    exit
fi
length=${#num} #表示num字符串的长度
len=0
sum=''
for i in $(seq 1 $length) #可写为`seq 1 $length`
do
    len=$[$len+1]
    if [[ $len == 3 ]]
    then
        sum=','${num:$[0-$i]:1}$sum 
        #这里$[0-$i]也可改为0-$i
         #这里可以看为3个部分,','为一个部分,${num:$[0-$i]:1}为一个部分,$sum为为一个部分
        len=0
    else
        sum=${num:$[0-$i]:1}$sum
    fi
done
if [[ -n $(echo $sum | grep '^,')  ]]
then
     echo ${sum:1}
else
     echo $sum
fi

解析:

 read -p 将输入变量赋值给变量num


-n string 如果 string长度非零,则为真 [ -n "$myvar" ]


${#num}获取(num)字符串的长度


sum=','${num:$[0-$i]:1}$sum   将这个拆开看就好理解了,sum=','(单独的,)${num:${0-$i}:1}(切片数组)$sum(变量$sum的值)


${num:$[0-$i]:1},直接通过 ${数组名[@或*]:起始位置:长度}     切片原先数组,$[0-$i]就是起始位置,如果数值是0或正数,就从左到右数,下标依次为0,1,2,3.....,如果数值是负数,就从右往左数,下标依次为......-4,-3-2,-1,最后的长度为,从下标起始位置从左往右开始数,长度是多少就数到第几个

例如:


[[email protected] ~]# a=(1 2 3 4 5 6 7 8)
[[email protected] ~]# echo ${a[@]:1:4}
2 3 4 5
[[email protected] ~]# a=(1 2 3 4 5 6 7 8)
[[email protected] ~]# echo ${a[@]:0-3:2}
6  7
#0-3的值为-3,这里不能直接写-3

^表示行的开始,所以grep '^,'表示打印以“,”开头的行

主要是for循环这一段。如果输入num的值为12345,那么for循环中的i需要从1遍历到5


当i=1时
当i=2时
当i=3时
当i=4时
当i=5时
则len=1(len=0+1)
则len=2(len=1+1)
则len=3(len=2+1)则len=1(len=0+1)则len=2(len=1+1)
if判断len不等于3,执行elif
if判断len不等于3,执行elifif判断len=3,条件成立
if判断len不等于3,执行elifif判断len不等于3,执行elif
则sum=${num:0-1:1}$sum,结果为sum=5与空($sum的值),所以sum=5
则sum=${num:0-2:1}$sum,结果为sum=4与 5($sum的值),所以sum=45则sum=‘,’${num:0-3:1}$sum,结果为sum=,与3与 45($sum的值),所以sum=,345则sum=${num:0-4:1}$sum,结果为sum=2与,345($sum的值),所以sum=2,345则sum=${num:0-5:1}$sum,结果为sum=1与2,345($sum的值),所以sum=12,345


以上是关于输入一串随机数字,然后按千分位输出。的主要内容,如果未能解决你的问题,请参考以下文章

Shell练习(十三)

求一串完整的php代码+html php随机生成10位数字,而且永远不会重复,在一个单行文本框内输出

15JS实现数字千分位格式化

数字千分位格式化

怎样将word文档中数字,自动加“千分符”?

表格内数字按千分位进行格式化