我有点像bash新手,所以如果这很容易的话,很抱歉我正在制作一个bash脚本,它将每分钟运行一次,以检查每个站点的服务是否正常(mysql、redis等((我们在服务器级别使用Glances(
理想情况下,我希望脚本是自给自足的,因此其中之一就是能够读取该站点的配置文件
所以,我想找这样的东西,但我知道这不太对:
FILE=./wp-config.php
if test -f "$FILE"; then
db_user=`cat wp-config.php | grep DB_USER | cut -d ' -f 4`
db_password=`cat wp-config.php | grep DB_PASSWORD | cut -d ' -f 4`
fi
FILE=./.env
if test -f "$FILE"; then
db_user=$(read_var DB_USERNAME .env)
db_password=$(read_var DB_PASSWORD .env)
fi
书面解释:
如果(在此目录中存在一个名为wp-config.php的文件(//也就是wordpress站点
- 获取DB_USER值
- 获取DB_PASSWORD值
如果(在此目录中存在一个名为.env的文件(//也就是一个laravel站点
- 获取DB_USER值
- 获取DB_PASSWORD值
然后脚本将继续连接到数据库,并进行各种检查,然后将信息发布到中央监控系统上
有人能帮我纠正错误吗我所拥有的是来自广泛的谷歌搜索!!!
Laravel./env
文件采用shell脚本语法,因此该部分很容易;
. ./.env
文件名前空格前的点是shell的指令,用于读取作为当前脚本一部分的文件内容(在一些shell中也称为source
,包括Bash,但此别名不能移植到POSIXsh
,如果您需要在Jenkins或其他程序中运行此别名,则可能会出现问题(。
这显然会添加.env
文件中的所有变量。如果您严格地想只读取这两个命名变量,可能将它们提取到一个单独的文件中,然后获取源文件。
另一个文件有一个无用的cat
和过时的命令替换语法,并且您不应该对私有变量使用大写字母(可能不会重用相同的变量nace,但现在这还没有意义(,所以我会将该部分重写为
file=./wp-config.php
if test -f "$file"; then
db_user=$(grep DB_USER "$file" | cut -d ' -f 4)
db_password=$(grep DB_PASSWORD "$file" | cut -d ' -f 4)
fi
如果你把文件名放在一个变量中,使用该变量,所以如果需要,你只需要在一个地方更改它。
您可以随时使用http://shellcheck.net/对于基本的健全性检查,尽管它不会发现所有这些问题。