zoukankan      html  css  js  c++  java
  • BASH 文本模版的简单实现 micro_template_compile

    详细代码

    ###############################
    #
    # Funciton: micro_template_compile
    #
    # Parameter:
    #    [1] => template :String
    #    [2..n] => values for placeholder as key=value
    #
    # Example:
    #    <- micro_template_compile '{code: {{error.code}}, message: "{{error.message}}"}' "error.code=127" "error.message=command not found."
    #       ---
    #    -> { code: 0, message: "" }
    ###############################
    function micro_template_compile() {
    
      template_string="$1"; shift;
      expression=""
    
      while [ $# -ne 0 ]; do
        key=$(echo "$1" | sed 's~^([^=]*)=(.*)$~1~g')
        value=$(echo "$1" | sed 's~^([^=]*)=(.*)$~2~g')
        expression="s~{{$key}}~$value~g;$expression"
        shift;
      done
    
      echo "$template_string" | sed "$expression"
    }
    
    


    使用案例

    运行

    micro_template_compile 'Hi {{name}}, it is {{date}} today and {{weather}} outside. :)
    message to you: {{message}}' 
      name='小王' date="$(date +"%Y/%m/%d")" weather="大晴天儿" message="咱们出去钓鱼吧。"
    


    输出

    Hi 小王, it is 2014/06/16 today and 大晴天儿 outside. :)
    message to you: 咱们出去钓鱼吧!



    使用到脚本中:

    #!/bin/bash
    
    #
    # Usage: $exename [options] -in templatefile key=value ...
    #
    # Examples:
    #   $exename -in ./1.txt.template -out ./1.txt f1=v1 f2=v2 f3=v3
    #   $exename -help
    #
    
    ###############################
    #
    # Funciton: micro_template_compile
    #
    # Parameter:
    #    [1] => template :String
    #    [2..n] => values for placeholder as key=value
    #
    # Example:
    #    <- micro_template_compile '{code: {{error.code}}, message: "{{error.message}}"}' "error.code=127" "error.message=command not found."
    #       ---
    #    -> { code: 0, message: "" }
    ###############################
    function micro_template_compile() {
    
      local template_string="$1"; shift;
      local expression=""
      local key=""
      local value=""
    
      while [ $# -ne 0 ]; do
        key=$(echo "$1" | sed 's~^([^=]*)=(.*)$~1~g')
        value=$(echo "$1" | sed 's~^([^=]*)=(.*)$~2~g')
        expression="s~{{$key}}~$value~g;$expression"
        shift;
      done
    
      echo "$template_string" | sed "$expression"
    }
    
    
    main() {
      template="$(cat "$arg_in")"
      eval "micro_template_compile '$template' $arg_datagroup > '$arg_out'"
      return 0
    }
    
    processargs() {
      # defaults:
      arg_in=""
      arg_out="stdout"
      arg_datagroup=""
    
      # arguments:
      while echo "$1" | grep "^-" >/dev/null 2>&1; do
        case "$1" in
          -in)
            arg_in="$2"; shift;
            ;;
          -out)
            arg_out="$2"; shift;
            ;;
        esac
        shift
      done
    
      while [ $# -ne 0 ]; do
        arg_datagroup="$arg_datagroup "$1""; shift;
      done
    
      # exports
      export arg_in arg_out arg_datagroup
    }
    
    processargs "$@"
    echo ""
    echo "arg_in=|$arg_in|"
    echo "arg_out=|$arg_out|"
    echo "arg_datagroup=|$arg_datagroup|"
    echo ""
    
    main
    
    


  • 相关阅读:
    blk_update_request: I/O error, dev fd0, sector 0
    将MySQL数据迁移到Redis
    专职DBA-MySQL DAL(Data Access Layer)中间件总结
    搞笑聊天(一)
    看图写话(一)
    NFS存储服务
    rsync备份服务
    专职DBA-使用Python操作MySQL数据库
    如何解决SecureCRT无法选择Monaco等其他字体
    MySQL架构类型
  • 原文地址:https://www.cnblogs.com/blfbuaa/p/6962160.html
Copyright © 2011-2022 走看看