创建一个 oneliner 来导入数据库

Creating a oneliner to import database

我正在尝试在 Linux 中制作一个 oneliner,它将从 wp-config.php 收集数据库主机、数据库名称、用户名和密码,并将其组合成一行,在其中我可以使用 .sh 文件.

我需要收集的代码块是:

/** The name of the database for WordPress */
define('DB_NAME', 'database_name_here');

/** MySQL database username */
define('DB_USER', 'username_here');

/** MySQL database password */
define('DB_PASSWORD', 'password_here');

/** MySQL hostname */
define('DB_HOST', 'localhost');

我要创建的行是:

mysql -h localhost -u username_here --password="password_here" database_name_here < db-backup.sql

我是新手,所以我尝试做的是:

grep DB_HOST DB_USER wp-config.php | cut -d "'" -f4 | awk '{print "mysql -h "[=14=];}' 这个开始是有效的,但是当我想向字符串添加更多信息时,我只得到最后一部分。

如何编写此代码以获得包含所有信息的整行?

不是单行的,但适用于您的简单示例

DB_PASSWORD=$(grep DB_PASSWORD wp-config.php | cut -d "'" -f4)
DB_USER=$(grep DB_USER wp-config.php | cut -d "'" -f4)
DB_NAME=$(grep DB_NAME wp-config.php | cut -d "'" -f4)
DB_HOST=$(grep DB_HOST wp-config.php | cut -d "'" -f4)

echo "mysql -h $DB_HOST -u $DB_USER --password=\"$DB_PASSWORD\" $DB_NAME"

注意事项:您不需要 awk,您只用它来连接字符串,所以我删除了它。而且输入文件中相关行的检测并不完善,可能会被很多东西搞糊涂,比如输入文件中是否有注释

/** we are using blabla as DB_NAME because <reasons> **/ 

它将检测到该行与 DB_NAME 匹配。 此外,恰好有一条匹配线也很重要。

MYSQLPWD=$(cat wp-config.php |grep DB_PASSWORD | cut -d \' -f 4)
MYSQLUSR=$(cat wp-config.php |grep DB_USER | cut -d \' -f 4)
MYSQLDBNAME=$(cat wp-config.php |grep DB_NAME | cut -d \' -f 4)
HT="localhost"

echo $MYSQLPWD
echo $MYSQLUSR
echo $MYSQLDBNAME
echo $HT

mysql -h$HT -u$MYSQLUSR -p$MYSQLPWD $MYSQLDBNAME <  $MYSQLDBNAME