shell脚本实现读取一个文件中的内容来创建多个文件

channel-san文件内容如下,现在需要根据内容中的方括号[]来创建文件名,方括号[]以后行的内容为新建文件的内容。

[dvb-t/au-Adelaide]
T 177500000 7MHz 3/4 NONE QAM64 8k 1/16 NONE
T 184500000 7MHz 2/3 NONE QAM64 8k 1/8 NONE
T 191500000 7MHz 3/4 NONE QAM64 8k 1/16 NONE
T 219500000 7MHz 3/4 NONE QAM64 8k 1/16 NONE
T 226500000 7MHz 3/4 NONE QAM64 8k 1/16 NONE
T 564500000 7MHz 2/3 NONE QPSK 8k 1/8 NONE
[dvb-t/au-AdelaideFoothills]
T 711500000 7MHz 3/4 NONE QAM64 8k 1/16 NONE
T 732500000 7MHz 3/4 NONE QAM64 8k 1/16 NONE
T 760500000 7MHz 2/3 NONE QAM64 8k 1/8 NONE
T 781625000 7MHz 3/4 NONE QAM64 8k 1/16 NONE
T 795500000 7MHz 3/4 NONE QAM64 8k 1/16 NONE
[dvb-t/au-Ballarat]
T 592625000 7MHz 2/3 NONE QAM64 8k 1/8 NONE
T 613500000 7MHz 3/4 NONE QAM64 8k 1/16 NONE
T 620625000 7MHz 3/4 NONE QAM64 8k 1/16 NONE
T 634625000 7MHz 2/3 NONE QAM64 8k 1/8 NONE
T 655500000 7MHz 3/4 NONE QAM64 8k 1/16 NONE
[dvb-t/au-Bendigo]
T 205500000 7MHz 3/4 NONE QAM64 8k 1/16 NONE
T 529500000 7MHz 2/3 NONE QAM64 8k 1/8 NONE
T 529500000 7MHz 3/4 NONE QAM64 8k 1/16 NONE

实现脚本s.sh如下,在linux系统中命令执行bash s.sh运行,s.sh和channel-san文件在相同目录下。

#!/bin/bash

fileName=""
format="dvb-s"
mkdir $format
while read -r line  #循环读取channel-scan中每一行存到line
do
    echo "line=$line "
    if [[ $line == *[* ]];
    then 
        fileName=$line
        fileName=${fileName/\[} #删除文件名中的字符[
        fileName=${fileName/\]} #删除文件名中的字符]
        echo "fileName=$fileName"
        if [[ $fileName == *$format* ]]; #判断文件名包含字符串dvb-s
        then
            echo "create $fileName "
            
            echo "#$fileName" >> $fileName #向文件中追加
        fi
    else
        if [[ $fileName == *$format* ]];
        then
            echo "append $line to $fileName"
            echo $line >> $fileName #向文件中追加读取到的行
        fi
    fi
done < channel-scan

你可能感兴趣的:(linux,linux,运维)