1. 程式人生 > >mysql -- 通過linux shell 指令碼,匯出部分資料

mysql -- 通過linux shell 指令碼,匯出部分資料

1.構建我的shell 指令碼

(1)最初情況

  • 下面這些語句還是有不少缺點的,從中可以看出來有大量的重複,應該想辦法簡化,嘗試去使用變數。
  • 簡化之後,達到的目的應該是最少的修改。
#!/bin/bash
mysqldump -h172.24.64.179 -umisc -p123456 app_test apk_files --where="apk_name='com.abazai.eightballpool'" > /volume1/testData/sql/app_test.sql
mysqldump -h172.24.64.179 -umisc -p123456 app_test apk_package --where="apk_name='com.abazai.eightballpool'" > /volume1/testData/sql/apk_package.sql
mysqldump -h172.24.64.179 -umisc -p123456 app_test apk_package_android --where="apk_name='com.abazai.eightballpool'" > /volume1/testData/sql/apk_package_android.sql
mysqldump -h172.24.64.179 -umisc -p123456 app_test apk_package_java --where="apk_name='com.abazai.eightballpool'" > /volume1/testData/sql/apk_package_java.sql
mysqldump -h172.24.64.179 -umisc -p123456 app_test apk_package_third --where="apk_name='com.abazai.eightballpool'" > /volume1/testData/sql/apk_package_third.sql
mysqldump -h172.24.64.179 -umisc -p123456 app_test combination --where="apk_name='com.abazai.eightballpool'" > /volume1/testData/sql/combination.sql
mysqldump -h172.24.64.179 -umisc -p123456 app_test inheritance --where="apk_name='com.abazai.eightballpool'" > /volume1/testData/sql/inheritance.sql
mysqldump -h172.24.64.179 -umisc -p123456 app_test inheritance --where="apk_name='com.abazai.eightballpool'" > /volume1/testData/sql/inheritance.sql
mysqldump -h172.24.64.179 -umisc -p123456 app_test invoke_androguard --where="apk_name='com.abazai.eightballpool'" > /volume1/testData/sql/invoke_androguard.sql
mysqldump -h172.24.64.179 -umisc -p123456 app_test method_androguard --where="apk_name='com.abazai.eightballpool'" > /volume1/testData/sql/method_androguard.sql

(2)改進之後的指令碼:

  • 這樣更改便於後期的調整,避免改動較多的地方。【也可以看出 變數的作用
  • 注意變數的定義方式:whereState="apk_name='com.abazai.eightballpool'"
  • 以及變數的使用方式:$whereState 或者 ${destPath}
  • 注意在Shell中字串的拼接方式:${destPath}app_test.sql

#!/bin/bash
whereState="apk_name='com.abazai.eightballpool'"
destPath="/volume1/testData/sql/"

mysqldump -h172.24.64.179 -umisc -p123456 app_test apk_files --where=$whereState

>${destPath}app_test.sql
mysqldump -h172.24.64.179 -umisc -p123456 app_test apk_package --where=$whereState >${destPath}apk_package.sql
mysqldump -h172.24.64.179 -umisc -p123456 app_test apk_package_android --where=$whereState > ${destPath}apk_package_android.sql
mysqldump -h172.24.64.179 -umisc -p123456 app_test apk_package_java --where=$whereState > ${destPath}apk_package_java.sql
mysqldump -h172.24.64.179 -umisc -p123456 app_test apk_package_third --where=$whereState > ${destPath}apk_package_third.sql
mysqldump -h172.24.64.179 -umisc -p123456 app_test combination --where=$whereState > ${destPath}combination.sql
mysqldump -h172.24.64.179 -umisc -p123456 app_test inheritance --where=$whereState > ${destPath}inheritance.sql
mysqldump -h172.24.64.179 -umisc -p123456 app_test invoke_androguard --where=$whereState > ${destPath}invoke_androguard.sql
mysqldump -h172.24.64.179 -umisc -p123456 app_test method_androguard --where=$whereState > ${destPath}method_androguard.sql

(3)但是 mysqldump 能力十分有限,比如說條件語句中不能使用Like,OR等關鍵詞。

而這些關鍵詞的識別,是mysql命令的專長。

所以查閱mysql ,得到可以這樣使用:

 mysql -e "select * from apk_files where apk_name='com.airkast.KCSFAM' OR apk_name='com.amparosoft.progressivemetronome.free'" -h172.24.64.179 -umisc -p123456 -D app_test

但是我們需要的是把這些東西,匯出來,於是可以和mysqldump相結合。

2.執行shell 指令碼。

 /bin/sh mysqlOut2.sh

3.移動檔案。

   執行完相應的指令碼之後,我想去移動檔案,這是一系列操作,我想放到一個命令中。

  於是我在視窗輸入:

  • && 將多個命令連線在了一起。

rm -r /volume1/共享檔案/常用軟體/sql/sql && mv /volume1/testData/sql /volume1/共享檔案/常用軟體/sql && mkdir /volume1/testData/sql