浅谈 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="xx.com"

而且,要注意得是,一般 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 脚本中,可以根据集群的名称来导入对应的配置。

查看全文

我的 VIM 配置

昨天给博客新建了一个我的装备分类,主要是想在这个类目下,分享一些我自己在用并且觉得值得推荐的软件(APP)或者硬件外设等等。相比之下,最值得推荐的应该是 Vim,一个古老而又强大的编辑器软件。

我从大二开始接触 Linux 就开始使用 Vim,至今也差不多有六、七年了。不过只有在最开始的一段时间,疯狂地在网上找自定义配置、找插件,之后就几乎没折腾过了。我的入门教程是大家來學 Vim 一個歷久彌新的編輯器A Byte of Vim。啃了这两份手册之后,基本上也就没继续再深入了解了。掌握了一些日常使用的技巧与方法,足以应付大量的编程任务了。我在入手 Macbook Air 之后,曾经尝试过 Sublime Text,也是一个很值得推荐的编辑器,无奈实在是精力有限,没去折腾,长草后就卸载了。我现在在 Mac 下面一直使用 MacVim

我目前的 Vim 工作环境截图:

my-vim

查看全文