SHELL脚本实现代码美化
Posted 和涛哥一起学习
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SHELL脚本实现代码美化相关的知识,希望对你有一定的参考价值。
作为一名搬砖长期工,已经患上代码强迫症,每当看到代码缩进不一致的情况,情不自禁地会手动进行缩进(可以利用UE编辑器有效的将TAB键修改为2个空格键,以保持跨平台的缩进一致问题),基于这种现象,爱写脚本的我编写了一个简易可使用的SHELL脚本实现代码美化。
实现效果
1、 '{' 后面的代码增加缩进,直到与之匹配的'}'为止;
2、 '{' 后面的代码增加缩进,直到与之匹配的'}'为止;
3、 ' " ' 双引号里的内容不参与缩进处理,包括'}'和'{' ;
4、美化前后对比:
实现算法
1、脚本有一个参数,文件名称全路径;
2、脚本通过逐行逐字(注意为了支持中文,需要逐字而不是逐字符)读取,具体代码如下:
##逐行读取
cat ${g_FILE}|while read -r "buf"
do
g_ROW_LAST=""
##逐字读取
while [ ${#buf} -gt 0 ] ##此处是变量的运算符
do
ch=$(echo "${buf}"|cut -b 1-1) ## -b 参数完美支持中文
##格式化
func_Fmt "${ch}"
buf="${buf#"$ch"}" ##此处是变量的运算符
done
echo "${g_ROW_LAST}" ##此处按行输出
done
3、格式化中的算法如下(此处用了全局变量g_FMT_SPACE、g_FMT_FLAG进行临时存储)
#格式化流程
#func_Fmt ${ch}
func_Fmt()
{
local ch="${1}"
case "${1}" in
"{") #'{'先输出 再增加缩进
func_echo; func_UptSpace_Row "ADD";
;;
"}") #'}'先减少缩进 再输出
func_UptSpace_Row "DEL"; func_echo;
;;
"\"") #'"'双引号里的内容不需要缩进处理
if [ ${g_FMT_FLAG} -eq 1 ]
then g_FMT_FLAG=0;
else g_FMT_FLAG=1;
fi
func_echo;
;;
*)
func_echo;
;;
esac
}
代码下载方式
链接: https://pan.baidu.com/s/154YNCxmLvrJknpRYeHEkYw
密码: wfvi
关注一下又不会怀孕!
以上是关于SHELL脚本实现代码美化的主要内容,如果未能解决你的问题,请参考以下文章