簡體   English   中英

創建一個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 "$0;}' grep DB_HOST DB_USER wp-config.php | cut -d "'" -f4 | awk '{print "mysql -h "$0;}'這項工作正常,但是當我想向字符串中添加更多信息時,我只是獲得了最后一部分。

如何編寫此代碼以獲取所有信息的完整行?

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

不是單線的,但適用於您的簡單示例

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匹配。 同樣,重要的是只有一條匹配的線。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM