2013-04-10 64 views
1

我有一個劇本,我想從在第二列表中指定的數組中刪除的項目,我有以下的代碼,但它不工作:排除串項目

db_exclude=('information_schema' 'mysql') 

databases=$(/usr/bin/mysql --defaults-extra-file=/etc/unimicrosys/sqlbackup/my.cnf -e 'show databases' -s --skip-column-names) 
length=${#databases[@]} 

for exclude in $db_exclude[@]; do 
    for ((i=0; i<$length; i++)); do 
     echo $i 
     if [[ databases[$i] = $exclude ]]; then 
      unset $databases[$i]; 
     fi; 
    done 
done 
+0

你得到了我的+1。 – 2013-04-10 22:20:03

+0

我想@parkydr已經發現了你的遺漏('$ {databases [$ i]}')。將來,您可能會通過使用shell調試功能'set -vx'或僅顯示可變擴展名'set -x'來查看問題出在哪裏。祝你好運。 – shellter 2013-04-11 03:09:15

+0

是啊調試對我來說很難,我已經習慣了C#和visual studio!感謝您的幫助 – g18c 2013-04-11 14:13:42

回答

2

我不能」牛逼檢查命令產生陣列的MySQL,但是這個作品,如果數據庫被設置爲一個數組

db_exclude=('information_schema' 'mysql') 

databases=('aaaa' 'information_schema' 'bbb' 'mysql' 'ccc') 

length=${#databases[@]} 

for exclude in ${db_exclude[@]}; do 
    for ((i=0; i<$length; i++)); do 
     echo $i 
     if [[ ${databases[$i]} = $exclude ]]; then 
      unset databases[$i]; 
     fi; 
    done 
done 

echo ${databases[@]} 

我通過運行帶有bash -x腳本這表明在for循環只執行一次,發現問題和比較是與文本「數據庫[0]」,而不是值。