为了账号安全,请及时绑定邮箱和手机立即绑定

如何在Shell脚本中获取INI值?

如何在Shell脚本中获取INI值?

慕森卡 2019-12-21 12:50:31
我有一个parameters.ini文件,例如:[parameters.ini]    database_user    = user    database_version = 20110611142248我想从bash shell脚本中读取并使用parameters.ini文件中指定的数据库版本,以便进行处理。#!/bin/sh    # Need to get database version from parameters.ini file to use in script    php app/console doctrine:migrations:migrate $DATABASE_VERSION我该怎么做?
查看完整描述

3 回答

?
临摹微笑

TA贡献1982条经验 获得超2个赞

然后使用awk对该行进行grepping如何


version=$(awk -F "=" '/database_version/ {print $2}' parameters.ini)


查看完整回答
反对 回复 2019-12-21
?
弑天下

TA贡献1818条经验 获得超7个赞

您可以通过以下方式使用bash本机解析器来解释ini值:


$ source <(grep = file.ini)

样本文件:


[section-a]

  var1=value1

  var2=value2

  IPS=( "1.2.3.4" "1.2.3.5" )

要访问变量,只需打印它们:echo $var1。您也可以使用上面(echo ${IPS[@]})所示的数组。


如果您只想要一个值,只需grep即可:


source <(grep var1 file.ini)

这很简单,因为您不需要任何外部库来解析数据,但是它有一些缺点。例如:


如果在=(变量名和值)之间有空格,则必须先修剪空格,例如


$ source <(grep = file.ini | sed 's/ *= */=/g')

或者,如果您不关心空格(包括中间的空格),请使用:


$ source <(grep = file.ini | tr -d ' ')

要支持;评论,请将其替换为#:


$ sed "s/;/#/g" foo.ini | source /dev/stdin

不支持这些部分(例如,如果您具有[section-name],则必须如上所示将其过滤掉,例如grep =),对于其他意外错误也是如此。


如果你需要阅读在特定的部分具体值,使用grep -A,sed,awk或ex)。


例如


source <(grep = <(grep -A5 '\[section-b\]' file.ini))

注意:在哪里-A5是本节中要读取的行数。替换source为cat进行调试。


如果您有任何解析错误,请通过添加以下内容来忽略它们: 2>/dev/null


查看完整回答
反对 回复 2019-12-21
  • 3 回答
  • 0 关注
  • 1147 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信