• 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
    
    


  • 相关阅读:
    MySql
    027 mysql
    navicat
    基于阿里云资源的分布式部署方案
    translate(50%,50%) 实现水平垂直居中
    SSH2 协议详解
    DNS服务配置篇 巴哥学Server2003
    Java 8 后的新功能梳理
    IBM Cognos BI 最佳实践系列 网站地址
    jsf2.0 入门视频 教程
  • 原文地址:https://www.cnblogs.com/blfbuaa/p/6962160.html
Copyright © 2020-2023  润新知