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

2023-06-09 22:54:23 浏览数 (1)

代码语言: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



0 人点赞