shell根据模板创建源程序

该博客介绍了如何利用Shell脚本,根据模板文件(如template.py)来创建Python、Java、Scala等源程序的初始骨架,简化开发过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

create XXX.py时用template.py创建初始的python脚本

同样可以创建java、scala、shell程序文件

#!/bin/bash

set -o nounset
set -o errexit

if [[ $# -ne 1 ]]; then
        echo need 1 parameter for filename to create
        echo filename should be XXX.scala XXX.py or XXX.sh
        exit 1
fi

bindir=`dirname $0`


file="$1"
ext=${file##*.}
classfullpath=${file%.*}
classname=${classfullpath##*.}
packagename=${classfullpath%.*}


if [[ -f "${classname}.${ext}" ]]; then
        echo file "${classname}.${ext}" is already exists
        exit 1
fi


case ${ext} in
        scala)
            templatefile=${bindir}/templates/template.scala
            ;;
        java)
            templatefile=${bindir}/templates/template.java
            ;;
        py)
            templatefile=${bindir}/templates/template.py
            ;;
        sh)
            templatefile=${bindir}/templates/template.sh
            ;;
        *)
            echo 'invalid filename'
            exit 1
esac

sed "s/\${CLASSNAME}/${classname}/g" ${templatefile} | sed "s/\${PACKAGENAME}/${packagename}/g" > "${classname}.${ext}"

scala模板例

object ${CLASSNAME} {

  def main(args : Array[String]) = {
    val config = getProperties("../conf/${CLASSNAME}.conf")
    // get config example : val value = config.get("output")
    // add code here
    println("Hello world!");
  }

  def getProperties(conffile:String) : Map[String,Any] = {
    var config = new java.util.Properties();
    try {
      config.load(new java.io.FileInputStream(conffile));
    } catch {
      case _: Exception => ;
    }
    val map = scala.collection.JavaConversions.mapAsScalaMap(config).map(t=>(t._1.toString()->t._2))
    return map.toMap
  }

  def runOther(scriptfile:String, args:Array[String]=Array[String]()) = {
    scala.tools.nsc.MainGenericRunner.main(scriptfile +: args)
  }
}

java模板例

class ${CLASSNAME} {

  public static void main(String[] args) {
    java.util.Properties config = getProperties("../conf/${CLASSNAME}.conf");
    // get config example : String value = (String) config.get("output")
    // add code here
    System.out.println("Hello world!");
  }

  public static java.util.Properties getProperties(String conffile) {
    java.util.Properties config = new java.util.Properties();
    try {
      config.load(new java.io.FileInputStream(conffile));
    } catch(Exception e) {
    }
    return config;
  }

  public static void runOther(String classname, String[] args) throws Exception {
    Class clazz = Class.forName(classname);
    clazz.getMethod("main",args.getClass()).invoke(clazz.newInstance(), args);
  }
}

python模板例

#!/usr/bin/python
#coding=utf-8

import sys

def main(argv):
        config = getProperties("../conf/${CLASSNAME}.conf")
        #get config example : value = config.get('setting', 'output')
        # add code here
        print("hello world!")

def getProperties(filename):
        import ConfigParser
        config = ConfigParser.ConfigParser()
        try:
            config.readfp(open(filename,"rb"))
        except Exception:
            pass
        return config

def runOther(filename, argv):
        import subprocess
        subprocess.call(["python",filename] + argv)

if( __name__ == "__main__" ):
        main(sys.argv)

shell模板例

#!/bin/bash
set -o nounset
set -o errexit


workdir=$(dirname $0)
cd ${workdir}

declare -a args
for((i=0;i<=$#;i++))
do
        eval args[${i}]=\"\${${i}}\"
done

function main()
{
        getProperties "../conf/${CLASSNAME}.conf" keys values
        #get config example : value=$(findValue key keys values)
        # add code here
        echo "Hello world!"
}

function getProperties()
{
        localfilename="$1"
        localkeys="$2"
        localvalues="$3"
        unset ${localkeys}
        unset ${localvalues}
        locali=0
        if [[ -f "${localfilename}" ]]; then
            while read line
            do
                if [[ "${line:0:1}" != "[" ]]; then
                    localkey=${line%%=*}
                    if [[ "${localkey}" != "" ]]; then
                        eval ${localkeys}[${locali}]=\"${localkey}\"
                        eval ${localvalues}[${locali}]=\"${localvalue}\"
                        let locali=${locali}+1
                    fi
                fi
            done < "${localfilename}"
        fi
}

function findValue()
{
        localkey="$1"
        eval localkeys=(\"\${$2[@]}\")
        eval localvalues=(\"\${$3[@]}\")
        for((locali=0; locali<${#localkeys[@]}; locali++))
        do
            if [[ "${localkey}" == "${localkeys[${locali}]}" ]]; then
                localvalue="${localvalues[${locali}]}"
                break
            fi
        done
        echo ${localvalue}
}

function runOther()
{
        filename="$1"
        args="$2"
        bash ${filename} "${args[@]}"
}

main "${args[@]}"


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值