网络书屋(Web Reading Room)

A blogging framework for hackers.

阅读openfoam源代码的小工具

  • 当你阅读源代码你是否厌倦了cd来cd去,于是想把他们堆在一个文件内
  • 而堆起来又不好看,于是想要打扮一下

于是写了下面的小程序,估计对于阅读有帮助,主要用到

  • shell变量处理
  • shell变量长度
  • find显示相对全路经
  • ==两边不能有空格,然而在赋值的时候必须没有空格
  • 利用函数思想,封装小寒数
  • 美观,把一个文件当作一个夹子进行显示

注意针对每一个版本都需要进行适当的修改.在getFile中有一个sed命令一定要注意,那是删除行首的7行,针对不同文件,需要适当修改.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#!/bin/bash - 
#===============================================================================
#
#          FILE: browser.sh
# 
#         USAGE: ./browser.sh 
# 
#   DESCRIPTION:  注意针对每一个版本都需要进行适当的修改
# 
#       OPTIONS: ---
#  REQUIREMENTS: ---
#          BUGS: ---
#         NOTES: ---
#        AUTHOR: Ye Zhaoliang (), zhaoturkkey@163.com
#  ORGANIZATION: YZL
#       CREATED: 2015年06月10日 21:50
#      REVISION:  ---
#===============================================================================
#---  FUNCTION  ----------------------------------------------------------------
#          NAME:  generateChapter
#   DESCRIPTION:  针对不同额文件采用不同的处理方法,判断目录 和判断脚本是一个重要的操作
#                 但是更为重要的是 find获得文集拿的绝对路径(相对于当前文件)
#    PARAMETERS:  
#       RETURNS:  
#-------------------------------------------------------------------------------

generateChapter()
{
    # 妙用find 得到当前目录的相对路径 不需要不断的进入目录
    for var in `find . -name "*"`
    do
        if [[ -d  $var ]] # < cannot . Error
        then
            echo "${currentDir}${var#.}是一个目录" # 使用#号来删除之前的点号
        elif [[ "${var##*/}" == "${0}" ]] # 一定要注意等式两边有空格
        then
            echo "${currentDir}${var#.} ${0} 脚本文件不处理"
        else
            getFile ${currentDir}${var#.}
        fi

    done
}


#---  FUNCTION  ----------------------------------------------------------------
#          NAME:  getFile
#   DESCRIPTION:  在每个文件的头部添加一些信息
#    PARAMETERS:  
#       RETURNS:  
#-------------------------------------------------------------------------------
getFile()
{
    startString="# -------------------<<<<<<<<<"$1" started>>>>>>>>>-------------------#"
    endString="# --------------------<<<<<<<<<"$1" ended >>>>>>>>>-------------------#"
       #echo "" >>summary.sh
    #echo -e "\033[44;37m -------------------<<<<<<<<<"$1" started>>>>>>>>>-------------------\033[0m" >>summary.sh
    #echo  "# -------------------<<<<<<<<<"$1" started>>>>>>>>>-------------------" >>summary.sh
    echo $startString >> summary.sh
    echo "#`printf "%$(( ${#startString}-2 ))s" " "`#" >>summary.sh
    echo "#`printf "%$(( ${#startString}-2 ))s" " "`#" >>summary.sh
    echo "#`printf "%$(( ${#startString}-2 ))s" " "`#" >>summary.sh ### 不加上$反而不行
   # echo "#" >>summary.sh
   # echo "#" >>summary.sh
    sed '1,7d' $1 >> summary.sh
    echo "#`printf "%$(( ${#endString}-2 ))s" " "`#" >>summary.sh
    echo "#`printf "%$(( ${#endString}-2 ))s" " "`#" >>summary.sh
    echo "#`printf "%$(( ${#endString}-2 ))s" " "`#" >>summary.sh
    #echo "#" >>summary.sh
    #echo "#" >>summary.sh
    #echo -e "\033[43;37m --------------------<<<<<<<<<"$1" ended >>>>>>>>>-------------------\033[0m" >> summary.sh
    #echo "# --------------------<<<<<<<<<"$1" ended >>>>>>>>>-------------------" >> summary.sh
    echo $endString >> summary.sh
    echo "" >>summary.sh
    echo "" >>summary.sh
    echo "" >>summary.sh

}

currentDir=`pwd`

# 如果存在 summary.sh 证明已经存在了,就先把删掉, 因为这里是
# 采用追加的方式,而不是写入。
if [[ -e ./summary.sh ]]
then 
    rm -rf ./summary.sh
fi
# 调用产生所有的文件夹内的数据到一个文件中

generateChapter

#sed -i '/C++/d' summary |sed '/=========/d'|sed '/OpenFOAM/d' | sed '/Version/d' | sed '/Web/d'|sed '/anipulation/d'

结果显示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# -------------------<<<<<<<<</openfoamF708/tutorials/incompressible/icoFoam/cavity/system/fvSolution started>>>>>>>>>-------------------#
#                                                                                                                                        #
#                                                                                                                                        #
#                                                                                                                                        #
FoamFile
{
    version     2.0;
    format      ascii;
    class       dictionary;
    location    "system";
    object      fvSolution;
}
// * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * //

solvers
{
    p
    {
        solver          PCG;
        preconditioner  DIC;
        tolerance       1e-06;
        relTol          0;
    }

    U
    {
        solver          smoothSolver;
        smoother        symGaussSeidel;
        tolerance       1e-05;
        relTol          0;
    }
}

PISO
{
    nCorrectors     2;
    nNonOrthogonalCorrectors 0;
    pRefCell        0;
    pRefValue       0;
}


#                                                                                                                                        #
#                                                                                                                                        #
#                                                                                                                                        #
# --------------------<<<<<<<<</openfoamF708/tutorials/incompressible/icoFoam/cavity/system/fvSolution ended >>>>>>>>>-------------------#



# -------------------<<<<<<<<</openfoamF708/tutorials/incompressible/icoFoam/cavity/system/fvSchemes started>>>>>>>>>-------------------#