浅谈 Shell 脚本配置文件格式.docxVIP

  • 11
  • 0
  • 约2.85千字
  • 约 6页
  • 2021-10-11 发布于河北
  • 举报
浅谈 Shell 脚本配置文件格式 浅谈 Shell 脚本配置文件格式 开发过程中为了削减hardcode,不行避开的需要供应配置文件给用户定制。对于高级编程语言来说,因为有丰富的第三方库,可供选择的配置文件格式有许多,比方xml、jsno、ini、yaml 等等。 key=value 文本格式配置 而对于linux shell,根本上很难用法前面提到的各种格式。所以在unix 系统上,许多shell 脚本的配置文件都是纯粹的key=value 文本格式,例如绝大多数的开机效劳启动脚本、网络配置文件等。 例子1:ntp 配置文件 $ cat /etc/sysconfig/ntpd # Drop root to id ntp:ntp by default. OPTIONS=-u ntp:ntp -p /var/run/ntpd.pid # Set to yes to sync hw clock after successful ntpdate SYNC_HWCLOCK=no # Additional options for ntpdate NTPDATE_OPTIONS= 例子2:网络配置文件 $ cat /etc/sysconfig/network NETWORKING=yes HOSTNAME=http://.doczj/doc/a8780c5958fb770bf78a55b6.html 而且,要留意得是,一般key=value的等号两边不应当有空格,因为大多数脚本都是挺直source 配置文件的〔当然,也有局部脚本是会自己处理配置文件格式〕,用法起来很简洁,根本上没有解析的操作: $ cat /etc/init.d/network if [ ! -f /etc/sysconfig/network ]; then exit 0 fi . /etc/sysconfig/network 理所当然,这种格式无法满足更冗杂的配置文件需求,比方ini 格式的section。那么,在shell 中除了满世界去找一个解析库之外,能有什么方法可以实现呢? 扩展key=value 文本格式配置 假设,我们管理着n 个集群,每个集群配置项都是一样的,我们需要在shell 脚本中,可以依据集群的名称来导入对应的配置。 下面我们介绍一种最简洁的方法,只需要针对第一种格式扩展下即可。我们创立一个配置文件名目conf.d,在这个名目下存放各个集群的配置文件。每个集群对应一个配置文件,文件名为集群名称,例如: $ cat conf.d/CLUSTER_A c_cluster_name=CLUSTER_A c_cluster_type=1 在脚本中,我们可以这样来导入相应集群的配置: function load_config() { local cluster_name=$1 if [ -f conf.d/$cluster_name ]; then . conf.d/$cluster_name fi } load_config CLUSTER_A 因为各个集群的配置文件互相独立,所以假如包含一些全局范围的配置项,需要在每个配置文件中都增加。或者,再增加一个入口的配置文件: # cat global.conf g_conf_dir=conf.d # 配置文件名目 g_version=0.1 # 全局配置 脚本相应调整下: GLOBAL_CONF=/etc/xxx/global.conf if [ -f $GLOBAL_CONF ]; then . $GLOBAL_CONF fi if [[ $g_conf_dir != /* ]]; then # 假如是相对途径 g_conf_dir=$(dirname $GLOBAL_CONF)/$g_conf_dir fi function load_config() { local cluster_name=$1 if [ -f $g_conf_dir/$cluster_name ]; then . $g_conf_dir/$cluster_name fi } load_config CLUSTER_A 类ini 配置格式 其次种方法,根本上已经可以解决我们之前假设中提出的需求,简洁而且实现便利,缺乏的是配置文件比拟零散,管理上可能不是很便利。假如,你仍旧倾向于一种类似ini 格式的配置,可以试试下面这种方法。 在这种场景下,每个集群应当是一个独立的section,所以转换成ini 格式,配置文件应当是这样的: [DEFAULT] g_version=0.1 ; 全局配置 [CLUSTER_A] c_cluster_name=CLUSTER_A c_cluster_type=1 但是,我们前面提到过,原生的shell

文档评论(0)

1亿VIP精品文档

相关文档