在Sh / Bash和php中parsingconfiguration参数的最佳/最简单的方法

我得到了每个PHP项目(大约25!),一些sh脚本,可以帮助我进行部署,回购同步,数据库导出/导出等常规任务。

sh脚本对于我pipe理的所有项目都是相同的,所以必须有一个configuration文件来存储依赖项目的不同参数:

# example conf, the sintaxys only needs to be able to have comments and be easy to edit. host=www.host.com administrator_email=guill@company.com password=xxx 

我只需要find一个干净的方式,从sh脚本中读取(parsing)这个configuration文件,同时也可以从我的PHP脚本中读取相同的参数。 无需使用XML。

你知道这个好的解决scheme吗?

吉列尔莫

Solutions Collecting From Web of "在Sh / Bash和php中parsingconfiguration参数的最佳/最简单的方法"

如果你不想像pavanlimo显示的那样来源文件,另一个选择是用循环引入变量:

 while read propline ; do # ignore comment lines echo "$propline" | grep "^#" >/dev/null 2>&1 && continue # if not empty, set the property using declare [ ! -z "$propline" ] && declare $propline done < /path/to/config/file 

在PHP中,相同的基本概念适用:

 // it's been a long time, but this is probably close to what you need function isDeclaration($line) { return $line[0] != '#' && strpos($line, "="); } $filename = "/path/to/config/file"; $handle = fopen($filename, "r"); $contents = fread($handle, filesize($filename)); $lines = explode("\n", $contents); // assuming unix style // since we're only interested in declarations, filter accordingly. $decls = array_filter($lines, "isDeclaration"); // Now you can iterator over $decls exploding on "=" to see param/value fclose($handle); 

简单地将脚本conf文件作为另一个sh文件来源!

例:

conf-file.sh:

 # A comment host=www.host.com administrator_email=guill@company.com password=xxx 

您的实际脚本:

 #!/bin/sh . ./conf-file.sh echo $host $administrator_email $passwword 

同样的配置文件可以在PHP中解析: http : //php.net/manual/en/function.parse-ini-file.php

对于Bash INI文件解析器还可以看到:

http://ajdiaz.wordpress.com/2008/02/09/bash-ini-parser/

从sh / bash解析ini文件

 #!/bin/bash #bash 4 shopt -s extglob while IFS="=" read -r key value do case "$key" in !(#*) ) echo "key: $key, value: $value" array["$key"]="$value" ;; esac done <"file" echo php -r myscript.php ${array["host"]} 

然后从PHP,使用argv