语法检查配置文件

时间:2016-04-23 14:28:10

标签: linux bash perl scripting

我需要检查一些配置文件的语法。

配置格式如下:

[sect1]
sect1file1
sect1file2
[sect1_ends]

[sect2]
sect2file1
sect2file2
[sect2_ends]

我的要求是检查方括号sect1内的[sect1]的开头,然后检查文件sect1file1sect1file2是否存在,然后检查通过在方括号sect1内阅读sect1_ends来结束[sect1_ends]。然后对sect2重复相同的操作,依此类推。

已经有一组允许的部分名称。我的目标是检查部分名称是否在列表中,以及语法是否没有任何错误。

我尝试使用

 perl -lne 'print $1 while (/^\[(.*?)\]$/g)' <config filename>

但我不确定如何检查并查看该文件。

2 个答案:

答案 0 :(得分:1)

我很高兴看到你尝试过。再试一次这个原型:

while read -r line; do
   if [ ${#line} -eq 0 ]; then
      continue # ignore empty lines
   fi
   if [[ "${line}" = \[*\] ]]; then
      echo "Line with [...]"
      if [ -n "${inSection}" ]; then
         if [ "${line}" = "${inSection/]/_ends]}" ]; then
            echo "End of section"
            unset inSection
         else
            echo "Invalid endtag ${line} while processing ${inSection}"
            exit 1
         fi
      else
         echo "Start of new section ${line}"
         inSection="${line}"
      fi
   else
      if [ -f "${line}" ]; then
         echo "OK file ${line}"
      else
         echo "NOK file ${line}"
      fi
   fi
done < inputfile

答案 1 :(得分:0)

您的解决方案看起来不错,但是-n reads lines from standard input(STDIN)。您需要将配置文件提供给STDIN以将其传递给您的脚本:

perl -lne 'print $1 while (/^\[(.*?)\]$/g)' <config.ini

替代选项将使用-p