自动统计出差费用-shell 脚本自动统计

本文涉及的产品
实时计算 Flink 版,5000CU*H 3个月
简介: 计算车费,餐补,住宿补。并且转换金额大写

#!/bin/bash

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

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



    for((i=0;i<${
   #filelist[*]};i++))
    do
        echo "文件: {
   mathJaxContainer[0]}{
   filelist[$i]}  
        正在重新命名为: {
   mathJaxContainer[1]}i.pdf
        " 
        sudo mv  {
   mathJaxContainer[2]}{
   filelist[{
   mathJaxContainer[3]}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={
   mathJaxContainer[11]}hanzi "  ;echo "" ;;  
        1)   hanzi={
   mathJaxContainer[12]}hanzi "  ;echo "" ;;  
        2)   hanzi={
   mathJaxContainer[13]}hanzi "  ;echo "" ;;  
        3)   hanzi={
   mathJaxContainer[14]}hanzi "  ;echo "" ;;  
        4)   hanzi={
   mathJaxContainer[15]}hanzi "  ;echo "" ;;  
        5)   hanzi={
   mathJaxContainer[16]}hanzi "  ;echo "" ;;  
        6)   hanzi={
   mathJaxContainer[17]}hanzi "  ;echo "" ;;  
        7)   hanzi={
   mathJaxContainer[18]}hanzi "  ;echo "" ;;  
        8)   hanzi={
   mathJaxContainer[19]}hanzi "  ;echo "" ;;  
        9)   hanzi={
   mathJaxContainer[20]}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={
   mathJaxContainer[27]}i:1} 
        psumzhengLenght=$[sumzhengLenght-i]
        echo "截取数字,第 $i 个位置 截取 一个数字为: $shuzi  当前剩余长度为: $psumzhengLenght = $sumzhengLenght - $i " 

        fcdanwei
        daxiezhi[{
   mathJaxContainer[30]}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
相关实践学习
基于Hologres轻松玩转一站式实时仓库
本场景介绍如何利用阿里云MaxCompute、实时计算Flink和交互式分析服务Hologres开发离线、实时数据融合分析的数据大屏应用。
Linux入门到精通
本套课程是从入门开始的Linux学习课程,适合初学者阅读。由浅入深案例丰富,通俗易懂。主要涉及基础的系统操作以及工作中常用的各种服务软件的应用、部署和优化。即使是零基础的学员,只要能够坚持把所有章节都学完,也一定会受益匪浅。
目录
相关文章
|
1月前
|
Shell
一个用于添加/删除定时任务的shell脚本
一个用于添加/删除定时任务的shell脚本
75 1
|
17天前
|
Shell Linux 测试技术
6种方法打造出色的Shell脚本
6种方法打造出色的Shell脚本
39 2
6种方法打造出色的Shell脚本
|
3天前
|
XML JSON 监控
Shell脚本要点和难点以及具体应用和优缺点介绍
Shell脚本在系统管理和自动化任务中扮演着重要角色。尽管存在调试困难、可读性差等问题,但其简洁高效、易于学习和强大的功能使其在许多场景中不可或缺。通过掌握Shell脚本的基本语法、常用命令和函数,并了解其优缺点,开发者可以编写出高效的脚本来完成各种任务,提高工作效率。希望本文能为您在Shell脚本编写和应用中提供有价值的参考和指导。
12 1
|
8天前
|
Ubuntu Shell 开发工具
ubuntu/debian shell 脚本自动配置 gitea git 仓库
这是一个自动配置 Gitea Git 仓库的 Shell 脚本,支持 Ubuntu 20+ 和 Debian 12+ 系统。脚本会创建必要的目录、下载并安装 Gitea,创建 Gitea 用户和服务,确保 Gitea 在系统启动时自动运行。用户可以选择从官方或小绿叶技术博客下载安装包。
22 2
|
22天前
|
监控 网络协议 Shell
ip和ip网段攻击拦截系统-绿叶结界防火墙系统shell脚本
这是一个名为“小绿叶技术博客扫段攻击拦截系统”的Bash脚本,用于监控和拦截TCP攻击。通过抓取网络数据包监控可疑IP,并利用iptables和firewalld防火墙规则对这些IP进行拦截。同时,该系统能够查询数据库中的白名单,确保合法IP不受影响。此外,它还具备日志记录功能,以便于后续分析和审计。
43 6
|
18天前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。
|
1月前
|
存储 Shell Linux
【Linux】shell基础,shell脚本
Shell脚本是Linux系统管理和自动化任务的重要工具,掌握其基础及进阶用法能显著提升工作效率。从简单的命令序列到复杂的逻辑控制和功能封装,Shell脚本展现了强大的灵活性和实用性。不断实践和探索,将使您更加熟练地运用Shell脚本解决各种实际问题
23 0
|
6月前
|
Shell 索引
shell脚本入门到实战(四)- 数组
shell脚本入门到实战(四)- 数组
|
6月前
|
Shell
shell脚本入门到实战(三) - 变量
shell脚本入门到实战(三) - 变量
|
6月前
|
Shell Linux 人机交互
shell脚本入门到实战(二)--shell输入和格式化输出
shell脚本入门到实战(二)--shell输入和格式化输出
409 0