shell创建文本,重命名文件,批量转换编码格式,重定向到markdown

1、要创建的文本内容:

b.txt.bak

cat /root/shellDir/program/sedTest/testFile/b.txt.bak
Linux系统发送告警脚本【www.vipsrc.com】.sh
MySQL数据库备份多循环【www.vipsrc.com】.sh
nginx 访问访问日志按天切割【www.vipsrc.com】.sh

2、根据文本内容创建对应的文件:

touchFile.sh.bak

cat touchFile.sh.bak

#!/bin/bash
currPathFile=/root/shellDir/program/sedTest/testFile/b.txt.bak
IFS=$'\n'

for i in `cat $currPathFile`
do
        touch $i
done

执行后的效果:
在这里插入图片描述

3、重命名文件 (将后面的网站名称给去掉)

rename.sh.bak

cat rename.sh.bak

#!/bin/bash
IFS=$'\n'

pwd=/root/shellDir/program/sedTest/testFile
#oraginalName=($(ls $pwd *.sh)) 原先这里是这样写的,发现这种写法会产生多种数据,它显示通配符的数据和绝对路径的所有文件,很J2怪。
oraginalName=($(ls $pwd | ls *.sh))
changeName=($(ls $pwd | awk -F '【' '/sh$/{print $1 ".sh"}'))

count=1
for (( i = 0; i < ${#oraginalName[@]}; ++i ));
do
        count=1
        for (( j = 0; j < ${#oraginalName[@]}; ++j ));
        do
                if [ $count==$i  ];then
                        # echo " ${oraginalName[i]} ---> ${changeName[i]}";
                       #mv  ${oraginalName[i]} ${changeName[i]}
                       mv  "$pwd/${oraginalName[i]}" "$pwd/${changeName[i]}"

                        break
                fi
        done
        let count++
done

执行效果:
在这里插入图片描述

2021年1月14日15:49:28 时隔几个月,然后发现 rename更好用。。。 执行下面操作即可,上面的代码就当锻炼一点逻辑思维了
rename "【www.vipsrc.com】" "" *.sh

4、批量转换编码格式

convertFile.sh.bak

cat convertFile.sh.bak

#!/bin/bash
### 将 values_here 替换为输入编码
FROM_ENCODING="iso-8859-1"
### 输出编码 (UTF-8)
TO_ENCODING="UTF-8"
### 转换命令
CONVERT=" iconv  -f   $FROM_ENCODING  -t   $TO_ENCODING"
### 使用循环转换多个文件
for  file  in  *.converted; do
$CONVERT   "$file"   -o  "${file%.sh}.gbk.converted"
done
exit 0

file指令可查看文件的编码格式

ls *.sh | xargs -I {
    
    } file {
    
    }file -i *.sh

参考博客:https://linux.cn/article-7959-1.html

执行效果:
没转换之前:
在这里插入图片描述
转换后:
在这里插入图片描述
但是转换之后还是乱码,很烦。在win上面显示是正常的,也转成UTF-8了,然后放到Linux里面执行又乱码了。 echo $LANG ------> en_US.UTF-8
(估计要像群友说的:在Windows下编辑复制文本,在Linux上vim,然后右键粘贴)
如果有什么好的方法欢迎一起讨论。

5、重定向到markdown

脚本内容:
appendFile.sh.bak

#!/bin/bash
IFS=$'\n'

pwd=/drives/e/jpg/test/convert
fileName=($(ls $pwd| ls  *.sh))

for (( i = 0; i < ${#fileName[@]}; ++i ));
do
cat >> $pwd/test.md <<EOF
\`\`\`bash
# ${
      
      fileName[i]}
`cat ${fileName[i]}`
\`\`\`


EOF
	
done

上面脚本碰到的坑:
1、cat里面的markdown格式的 `号要加转义,否则一直卡住,ctrl+c退出后,终端直接掉线了,要求重连。
2、cat重定向的最后的EOF要顶格写,不然报莫名其妙的错。
在这里插入图片描述
执行后的效果:(但是内容乱码,如果老哥们,有更好的解决方法欢迎讨论讨论)
把所有的*.sh内容追加到 markdown格式里面
在这里插入图片描述

文章到此差不多结束了,搞上面这么多的操作目的是,将之前学习的shell脚本做的理解注释,发出来。做个笔记。比如:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/Nightwish5/article/details/109332594