Bash脚本 - 将PHP INI位置存储在变量中

时间:2018-01-14 11:52:19

标签: php linux bash

我正在尝试创建一个bash脚本,以便在我开发时在我的服务器上安装各种东西。想法是它在部署上运行,如果我更改服务器,我可以运行脚本,一切都会正常工作。

到目前为止,我有这个:

#!/bin/sh
apt-get update  # To get the latest package lists
apt-get install imagemagick ghostscript

INI_LOC=echo php -i | grep 'php.ini' | grep 'Loaded Configuration File'

哪一半在那里。 $ INI_LOC现在具有值"已加载配置文件=> /etc/php/7.1/cli/php.ini"

我的问题是,如何将此变量更改为仅显示" /etc/php/7.1/cli/php.ini"?

下一步是使用此变量添加" extension = imagick.so"到php.ini文件,如果它还没有被添加。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:0)

  

$ INI_LOC现在的值为“已加载的配置文件=>   /etc/php/7.1/cli/php.ini“

     

我的问题是,如何将此变量更改为仅显示   “/etc/php/7.1/cli/php.ini”?

好像你只需要从INI_LOC中删除“已加载的配置文件=>”字符串:

INI_LOC=`echo $INI_LOC | sed 's/Loaded Configuration File => //'`

答案 1 :(得分:0)

获取当前使用的php.ini的文件名:

INI_LOC=$(php -i|sed -n '/^Loaded Configuration File => /{s:^.*> ::;p;q}')

然后,检查它是否有extention=imagick.so

sed -n 's:^[\t ]*::;/^;/d;/^$/d;s: *= *:=:;/extension="*imagick.so"*/{p;q}' <"$INI_LOC"

如果找不到extension=imagick.so,请在使用[PHP]

制作备份文件时将其插入sed -i~
sed -i~ '/^[\t ]*\[PHP\][\t ]*$/{s:$:\nextension=imagick.so:}' "$INI_LOC"

现在,结合以上所有内容:

INI_LOC=$(php -i|sed -n '/^Loaded Configuration File => /{s:^.*> ::;p;q}')
if [ -f "$INI_LOC" ]; then
  FOUND=$(sed -n 's:^[\t ]*::;/^;/d;/^$/d;s:[\t ]*=[\t ]*:=:;/extension="*imagick.so"*/{p;q}' <"$INI_LOC")
  if [ -z "$FOUND" ]; then
    sed -i~ '/^[\t ]*\[PHP\][\t ]*$/{s:$:\nextension=imagick.so:}' "$INI_LOC"
  fi
fi
  1. sed -n '/^Loaded Configuration File => /{s:^.*> ::;p;q}'):在该行的开头找到包含Loaded Configuration File =>的行; print(p)然后退出(q)

  2. s:^[\t ]*::;:删除所有行开头的所有空格

  3. /^;/d;/^$/d;:删除(跳过)空行和注释行

  4. s:[\t ]*=[\t ]*:=:;:删除等号周围的所有空格

  5. /extension="*imagick.so"*/{p;q}:如果找到extensions=imagick.soextensions="imagick.so",则打印(p)该行并退出(q)

  6. sed -i~ '/^[\t ]*\[PHP\][\t ]*$/{s:$:\nextension=imagick.so:}' "$INI_LOC":在extension=imagick.so区块中插入[PHP]

  7. 抱歉我的英语不好,因为我不是说英语的人。