前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >自动统计出差费用-shell 脚本自动统计, 计算车费,餐补,住宿补。并且转换金额大写

自动统计出差费用-shell 脚本自动统计, 计算车费,餐补,住宿补。并且转换金额大写

原创
作者头像
eisc
修改2023-06-09 22:54:23
2730
修改2023-06-09 22:54:23
举报
代码语言:javascript
复制
#!/bin/bash

mv()
{                               # 发票名字乱码,批量改名字

    dir="/datadisk/eisc/ftp/eisc/报销/20230529/高德打车电子发票"
    filelist=(`ls $dir | grep -v mv.sh`)



    for((i=0;i<${#filelist[*]};i++))
    do
        echo "文件: $dir/${filelist[$i]}  
        正在重新命名为: $dir/$i.pdf
        " 
        sudo mv  $dir/${filelist[$i]}   $dir/$i.pdf
    done

    echo "列出所有文件: "; ls -alh $dir/

}


feiyong()
{

    quwei=2;

    datasum=(                      # 车船费记录
        93.51
        26.6
        24.54
        29.89
        70.16
        10.49

        33.88
        8.7
        51.44
        207.2
        50.94
        15.5

        42.0
        90.5
        35
        17.00
    )


    cblist=(                        # 餐补标准
        60                          # 60元/天

        20                          # 20 天
    )

    zslist=(                        # 住宿费标准
        170                         # 住宿 170元/天

        19                          # 19 天
    )
    
}


chechaun()
{
    feiyong

    ccsum=0                   # sum 初始数值为 数组第一个元素

    echo "default sum is :  $ccsum"

    for((i=0;i<${#datasum[*]};i++)) 
    do
        x="${datasum[$i]}"
        p=$ccsum                           # sum 会自动增加,在增加之前将数值存入变量,得到 sum 增加之前的数值
        ccsum=`echo "  " | awk -v x="$x"  -v sum="$ccsum" -v quwei=$quwei '{printf "%.2f", sum+x }'`
        echo "车船报销费: sum = sum + x = $p + $x = $ccsum " 
    done

    echo "" ; echo ""; echo "" ;

}

canbu()
{
    feiyong
    x=${cblist[0]};
    y=${cblist[1]};

    cbsum=`echo " " | awk -v x="$x" -v y="$y" '{printf "%.2f", x*y}'`
    cbsumstr=`echo "餐补为: cbsum = $x x $y = $cbsum"`
}

zhusu()
{
    feiyong
    x=${zslist[0]} ;
    y=${zslist[1]} ;

    zssum=`echo "" | awk -v x="$x" -v y="$y" '{printf "%.2f", x*y}' `
    zssumstr=`echo "住宿补为: zssum = $x x $y = $zssum"`
}

fcdanwei()
{

    daxielist=(
       零  壹  贰  叁  肆  伍       陆  柒  捌  玖   拾      佰  仟      万  亿      元   角   分    整
    #  0   1   2   3   4  5       6   7   8  9   10      11  12     13  14      15   16  17    18
    )

    case "$psumzhengLenght" in
        1)  echo "当前长度为 1 为 元 单位" ;  danwei=${daxielist[15]} ;;
        2)  echo "当前长度为 2 为 拾 单位" ;  danwei=${daxielist[10]} ;;
        3)  echo "当前长度为 3 为 佰 单位" ;  danwei=${daxielist[11]} ;;
        4)  echo "当前长度为 4 为 仟 单位" ;  danwei=${daxielist[12]} ;;
        5)  echo "当前长度为 5 为 万 单位" ;  danwei=${daxielist[13]} ;;
        9)  echo "当前长度为 6 为 亿 单位" ;  danwei=${daxielist[14]} ;;
        *)  echo "未定义长度单位" ;;
    esac


    case "$psumxiaoLenght" in
        1)  echo "当前长度为 1 为 分 单位" ;  danwei=${daxielist[17]} ;;
        2)  echo "当前长度为 2 为 角 单位" ;  danwei=${daxielist[16]} ;;
        *)  echo "未定义长度单位" ;;
    esac

    case "$shuzi" in 
        0)   hanzi=${daxielist[0]} ; echo "当前数字为 0 为 对应大写汉字:$hanzi "  ;echo "" ;;  
        1)   hanzi=${daxielist[1]} ; echo "当前数字为 1 为 对应大写汉字:$hanzi "  ;echo "" ;;  
        2)   hanzi=${daxielist[2]} ; echo "当前数字为 2 为 对应大写汉字:$hanzi "  ;echo "" ;;  
        3)   hanzi=${daxielist[3]} ; echo "当前数字为 3 为 对应大写汉字:$hanzi "  ;echo "" ;;  
        4)   hanzi=${daxielist[4]} ; echo "当前数字为 4 为 对应大写汉字:$hanzi "  ;echo "" ;;  
        5)   hanzi=${daxielist[5]} ; echo "当前数字为 5 为 对应大写汉字:$hanzi "  ;echo "" ;;  
        6)   hanzi=${daxielist[6]} ; echo "当前数字为 6 为 对应大写汉字:$hanzi "  ;echo "" ;;  
        7)   hanzi=${daxielist[7]} ; echo "当前数字为 7 为 对应大写汉字:$hanzi "  ;echo "" ;;  
        8)   hanzi=${daxielist[8]} ; echo "当前数字为 8 为 对应大写汉字:$hanzi "  ;echo "" ;;  
        9)   hanzi=${daxielist[9]} ; echo "当前数字为 9 为 对应大写汉字:$hanzi "  ;echo "" ;; 
        *)  echo "未定义数字大写" ;;
    esac

}


shengcheng()                    
{
    for((i=0;i<=9;i++))                         # 我是 case 代码生成工具
    do
        echo "        $i)   hanzi=\${daxielist[$i]} ; echo \"当前数字为 $i 为 对应大写汉字:\$hanzi \"  ;echo \"\" ;;  ";
    done
}


capitalize()
{

    sumzheng=`echo $zongsum  | awk -F"." '{print $1}'`
    sumxiao=`echo $zongsum  | awk -F"." '{print $2}'`

    sumzhengLenght=${#sumzheng} 
    sumxiaoLenght=${#sumxiao} 

    echo "整数部分: $sumzheng   长度 $sumzhengLenght   小数部分 : $sumxiao  长度:$sumxiaoLenght " ; echo "" 

    for((i=0;i<$sumzhengLenght;i++))
    do
        shuzi=${sumzheng:$i:1} 
        psumzhengLenght=$[sumzhengLenght-i]
        echo "截取数字,第 $i 个位置 截取 一个数字为: $shuzi  当前剩余长度为: $psumzhengLenght = $sumzhengLenght - $i " 

        fcdanwei
        daxiezhi[$i]=`echo $hanzi $danwei `
        
    done

    psumzhengLenght="null";
    echo "#------- 大写结束 重置 大写匹配参数,不再匹配大写环境 ---------#" ; echo "";


    for((i=0;i<$sumxiaoLenght;i++))
    do
        shuzi=${sumxiao:$i:1} 
        psumxiaoLenght=$[sumxiaoLenght-i]
        echo "截取数字,第 $i 个位置 截取 一个数字为: $shuzi  当前剩余长度为: $psumxiaoLenght = $sumxiaoLenght - $i " 

        fcdanwei
        Xdaxiezhi[$i]=`echo $hanzi $danwei `
    done


}

 

main()
{
    chechaun
    canbu
    zhusu

    a="$ccsum";
    b="$cbsum";
    c="$zssum"; 

    echo "";
    canzhusum=`echo "" | awk -v b="$b" -v c="$c" '{printf "%.2f", b+c}' `
    zongsum=`echo "" | awk -v a="$a" -v b="$b" -v c="$c" '{printf "%.2f", a+b+c}'`

    capitalize
    #shengcheng

    echo "车船费: $ccsum  $cbsumstr  $zssumstr " ; echo ""
    echo "餐住总和: $canzhusum  " ; echo "" ; echo "所有费用: $zongsum" ; echo ""
    echo "#----------------------#" 
    echo "大写:    ${daxiezhi[*]}  ${Xdaxiezhi[*]}"
    echo "#----------------------#"
}
main


# 一键使用: wget eisc.cn/file/ubuntu/shell/tools/file/chuchai-sum.sh; sudo chmod +x chuchai-sum.sh ; ./chuchai-sum.sh



原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档