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

本文涉及的产品
实时计算 Flink 版,1000CU*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+Flink搭建GitHub实时数据大屏
通过使用Flink、Hologres构建实时数仓,并通过Hologres对接BI分析工具(以DataV为例),实现海量数据实时分析.
实时计算 Flink 实战课程
如何使用实时计算 Flink 搞定数据处理难题?实时计算 Flink 极客训练营产品、技术专家齐上阵,从开源 Flink功能介绍到实时计算 Flink 优势详解,现场实操,5天即可上手! 欢迎开通实时计算 Flink 版: https://cn.aliyun.com/product/bigdata/sc Flink Forward Asia 介绍: Flink Forward 是由 Apache 官方授权,Apache Flink Community China 支持的会议,通过参会不仅可以了解到 Flink 社区的最新动态和发展计划,还可以了解到国内外一线大厂围绕 Flink 生态的生产实践经验,是 Flink 开发者和使用者不可错过的盛会。 去年经过品牌升级后的 Flink Forward Asia 吸引了超过2000人线下参与,一举成为国内最大的 Apache 顶级项目会议。结合2020年的特殊情况,Flink Forward Asia 2020 将在12月26日以线上峰会的形式与大家见面。
目录
相关文章
|
2月前
|
存储 安全 Unix
七、Linux Shell 与脚本基础
别再一遍遍地敲重复的命令了,把它们写进Shell脚本,就能一键搞定。脚本本质上就是个存着一堆命令的文本文件,但要让它“活”起来,有几个关键点:文件开头最好用#!/usr/bin/env bash来指定解释器,并用chmod +x给它执行权限。执行时也有讲究:./script.sh是在一个新“房间”(子Shell)里跑,不影响你;而source script.sh是在当前“房间”里跑,适合用来加载环境变量和配置文件。
394 9
|
2月前
|
存储 Shell Linux
八、Linux Shell 脚本:变量与字符串
Shell脚本里的变量就像一个个贴着标签的“箱子”。装东西(赋值)时,=两边千万不能有空格。用单引号''装进去的东西会原封不动,用双引号""则会让里面的$变量先“变身”再装箱。默认箱子只能在当前“房间”(Shell进程)用,想让隔壁房间(子进程)也能看到,就得给箱子盖个export的“出口”戳。此外,Shell还自带了$?(上条命令的成绩单)和$1(别人递进来的第一个包裹)等许多特殊箱子,非常有用。
268 2
|
5月前
|
Shell
Shell脚本循环控制:shift、continue、break、exit指令
使用这些命令可以让你的Shell脚本像有生命一样动起来。正确使用它们,你的脚本就能像一场精心编排的舞蹈剧目,既有旋律的起伏,也有节奏的跳跃,最终以一场惊艳的表演结束。每一个动作、每一个转折点,都准确、优雅地完成所需要表达的逻辑。如此,你的脚本不只是冰冷的代码,它透过终端的界面,跳着有节奏的舞蹈,走进观众——使用者的心中。
245 60
|
2月前
|
数据采集 监控 Shell
无需Python:Shell脚本如何成为你的自动化爬虫引擎?
Shell脚本利用curl/wget发起请求,结合文本处理工具构建轻量级爬虫,支持并行加速、定时任务、增量抓取及分布式部署。通过随机UA、异常重试等优化提升稳定性,适用于日志监控、价格追踪等场景。相比Python,具备启动快、资源占用低的优势,适合嵌入式或老旧服务器环境,复杂任务可结合Python实现混合编程。
|
4月前
|
Web App开发 缓存 安全
Linux一键清理系统垃圾:释放30GB空间的Shell脚本实战​
这篇博客介绍了一个实用的Linux系统盘清理脚本,主要功能包括: 安全权限检查和旧内核清理,保留当前使用内核 7天以上日志文件清理和系统日志压缩 浏览器缓存(Chrome/Firefox)、APT缓存、临时文件清理 智能清理Snap旧版本和Docker无用数据 提供磁盘空间使用前后对比和大文件查找功能 脚本采用交互式设计确保安全性,适合定期维护开发环境、服务器和个人电脑。文章详细解析了脚本的关键功能代码,并给出了使用建议。完整脚本已开源,用户可根据需求自定义调整清理策略。
478 1
|
6月前
|
存储 Unix Shell
确定Shell脚本在操作系统中的具体位置方法。
这对于掌握Linux的文件系统组织结构和路径方面的理解很有帮助,是我们日常工作和学习中都可能使用到的知识。以上讲解详细清晰,应用简便,是每一个想要精通操作系统的计算机爱好者必备的实用技能。
165 17
|
6月前
|
Linux Shell 数据安全/隐私保护
Centos或Linux编写一键式Shell脚本创建用户、组、目录分配权限指导手册
Centos或Linux编写一键式Shell脚本创建用户、组、目录分配权限指导手册
370 3
|
Shell 索引
shell脚本入门到实战(四)- 数组
shell脚本入门到实战(四)- 数组
147 0
|
Shell
shell脚本入门到实战(三) - 变量
shell脚本入门到实战(三) - 变量
171 0
|
Shell Linux 人机交互
shell脚本入门到实战(二)--shell输入和格式化输出
shell脚本入门到实战(二)--shell输入和格式化输出
685 0