88万行代码生成脚本

2021-10-24   


基于bash的shell脚本实现, 直接在linux系统执行该脚本即可在当前目录生成目标源文件'happy.c`, 可通过入参指定代码量.

#!/bin/bash
# 给出一个不多于5位的正整数, 要求
#  1. 求出他是几位数
#  2. 分别输出每一位数
#  3. 按逆序输出各位数字, 例如原数为5631, 应输出1365

g_argv=$1
g_map=(个 十 百 千 万)
g_target_file="./happy.c"
g_target_head=\
"#include <stdio.h>

int main(int argc, char *argv[]) {
    int num;
    printf(\"请给出一个不多于五位数的正整数:\\\\n\");
    scanf(\"%d\", &num);

    switch (num) {
"

g_target_tail=\
"        default:
            printf(\"非法输入\\\\n\");
    }

    return 0;
}
"

# 中间内容:
#        case 1:
#            printf("是%d位数\n", 1);
#            printf("个位数是: %d\n", 1);
#            printf("倒过来是: %d\n", 1);
#            break;

function solution() {
    local num=$1
    local cur=0
    local len=0
    local line=""
    local reverse=""

    while [[ $num -ne 0 ]]; do
        cur=$(($num % 10))
        num=$(($num / 10))

        line="${line}\n            printf(\"${g_map[$len]}位数是: %d\\\\n\", ${cur});"
        reverse=${reverse}${cur}
        let len++
    done

    reverse=$(echo ${reverse} | sed "s/^0*//g")

    echo -e "        case ${1}:" >> ${g_target_file}
    echo -e "            printf(\"是%d位数\\\\n\", ${len});${line}" >> ${g_target_file}
    echo -e "            printf(\"倒过来是: %d\\\\n\", ${reverse});" >> ${g_target_file}
    echo -e "            break;" >> ${g_target_file}
}

function main() {
    echo -e "${g_target_head}" > ${g_target_file}

    for i in $(seq 1 ${g_argv:=99999}); do
        solution $i
    done

    echo -e "${g_target_tail}" >> ${g_target_file}
}

main

Q.E.D.